你好欢迎来到上海宏烨教育!
icon
icon
icon

学PHP,你不得不知的这12特性

来源:未知时间:2016-09-28点击:

  

  1.转换令人头痛

  在利用PHP进行项目创建的过程中,最大的挑战之一在于清楚地知道什么时候需要输入HTML、什么时候需要输入PHP代码。将二者相结合正是PHP语言的一大卖点,但要充分发挥其优势却着实不是易事。当查看某个文件并关注其中的代码时,首先需要搞清楚的就是那些迫使我们不得不从HTML编写转向创建服务器指令的标签都在哪里?值得注意的是,必须要高度重视这些标签,因为只有这样我们才能将代码与标记整合起来并使其顺畅运作。当然,大多数情况下它只会让人晕头转向。

  2.标记的迷宫

  将服务器指令与浏览器标记结合起来实在是一种失误。在Java这方面,其研发团队严格遵循着MVC模式。数据模型被归于一个文件中,用于控制视图的布局结构被归于另外的文件中,而用于构建控制器的逻辑也拥有自己的归属文件。将这些条目区分并隔离开来能够让整个项目变得更有条理。但在PHP方面,最基本的设计思路就是开发者应当将HTML标记与服务器的控制器逻辑杂糅在一起。虽然我们不是没办法把它们区分开—大多数人也确实是这样做的。

  3.命名约定的不一致性与特殊性

  例如,base64_encode方法中用到了下划线,但urlencode则没有。此外,php_uname这一名称中使用了下划线,而phpversion则没有,strcmp函数是不能够大写的,但strcasecmp却可以。strpos不能大写,stripos则可以,这些遵循一定的规则,开发者们必须得记清楚。

  4.灾难般的排序

  Java拥有一项基础排序函数外加一个适用于所有对象的简单接口。如果大家希望使用其它算法、动手添加进去即可,而且大多数情况下标准函数已经完全够用。而在PHP这边,光是排序函数就能列出一条长长的清单:usort、sort、uksort以及array_sort等等(请注意,其中有一些还需要用到下划线)。这些排序函数开发者也必须清楚。

  5.开源存在一定局限性

  PHP也许确实拥有开源的诸多优势,但缓存等卓越功能却只存在于商用版本当中。当然,这就是现实社会,毕竟Zend需要借此赚取利润。再有,该公司还需要通过向特定用户群体出售最佳版本的方式支持整个PHP项目。抱怨这一点就像抱怨地心引力带来的不便一样,正确但却毫无意义—地球就在那里,根本不鸟你喜不喜欢。请大家活得理性一些,别总幻想着人们都能活在乌托邦式的开源环境当中。

  6.糟糕的命名空间

  大家有没有创建自己函数的打算?如果有,请首先确定到底要使用PHP 5.3或者其后续版本,因为这里正是命名空间出现的分界线。如果大家希望使用早期版本,则必须确保编码内容与库之间不存在冲突—毕竟在早期发展阶段,PHP中的所有内容都具备全局化属性。如果大家决定使用PHP 5.3并接受命名空间的加入,那么请作好准备迎接“反斜杠”—一个丑陋的标点符号—的降临。

  7.糟糕的type安全

  这个问题简直可怕,首先举个PHP程序员们喜闻乐见的例子:

  (string)"false"

  (int)0

  请注意,这并不属于那种某些PHP支持者所争论的“函数副作用”的典型情况。毕竟t当中也包含着大量由于type转换所引发的同类情况。事实上,这一行想表达的是:左侧为字符串,右侧为一个整数。只不过左侧与右侧内容完全相等。照这样说来,如果让PHP的设计者负责管理、世界上的每个人都能彼此和睦相处。

  8.选择太多,冗余太多

  PHP语言的一大特色就是可做的事太多,做事的途径同样太多。每一行命令的结尾都可以通过数字符号或者双斜线来进行注释。无论是浮点数字还是双精度数字都代表着同样的含义。简单的设计往往会被人们所忽略,因为大家在代码贡献过程中喜欢添加自己的小特性。这有点像依靠委员会体系进行设计,只不过该委员会从来没考虑到过把其中的差异性剔除掉。

  9.诡异的变量命名规则

  把美元符号作为前缀实在不是个好主意。也许强制性地在所有变量前添加这个符号是为了更轻松地将其插入到模板当中,但这样说来常数内容也同样需要这么个符号啊—为什么实际上却用不着呢?

  10.CPU资源争夺战

  对于32位计算设备来说,整数数值过大始终是个无法回避的难题。不过在另一方面,64位设备却不会受此影响,也就是说代码在不同设备上的运行状态是不同的。但一旦把运行平台转换成服务器,情况则会再度变化。这时如果希望重现原来台式机上的错误,结果可能不容乐观。惟一的好消息是,32位设备将很可能最终消失。

  11.SQL注入

  将SQL注入这一安全漏洞的主要形式之一归咎于PHP确实有失公允。人们在其它语言当中同样会不慎输入奇怪的SQL字符串。之所以将其纳入文章,主要是考虑到PHP语言更容易让该漏洞攫取数据并发送至MySQL—简单且轻而易举。虽然新手在使用任何一种语言时都可能犯下同样的错误,但这类情况在PHP中出现的机率明显要高得多得多。

  12不兼容式的变更太多

  不同版本之间存在巨大差异,兼容性问题也绝不是小事。以Java或者t为代表的编程语言在快速发展的同时也牺牲了向下兼容的特性。事实上,老代码在新设备上无法运行的问题并不少见。但这一切与PHP的情况其实不尽相同。在PHP方面,不同版本之间往往差别巨大,总而言之,在查看服务器上是否有项目需要升级时,请优先把目光对准PHP。