【IT168 技术】命名约定前后矛盾、版本兼容相互冲突,PHP语言在各个层面上都给开发人员带来了诡异而难解的谜局——这就是我们今天要讨论的话题。我们真的对PHP深恶痛绝吗?不,当然不是。如果真是这样,我们就不会如此广泛地使用Drupal、WordPress以及其它一些同类框架。假设我们真的讨厌PHP,那么最直接的办法是转向Java而非在这里放什么厥词。不过需要提醒各位拥护者的是,也别因为熟悉而对PHP的那些缺陷视而不见。在今天的文章中,我们将一同了解批评者们对于这种热门服务器端脚本工具所作出的总结。
以下十二条内容来自我们多年以来对该语言的实践使用经验。
转换令人头痛
在利用PHP进行项目创建的过程中,最大的挑战之一在于牢记我们哪些时候需要输入HTML、而哪些时代需要输入PHP代码。将二者相结合正是PHP语言的一大卖点,但要充分发挥其优势却着实不是易事。当我们查看某个文件并关注其中的代码时,首先需要搞清楚的就是——那些迫使我们不得不从HTML编写转向创建服务器指令的标签都在哪里?各位必须要高度重视这些标签,因为只有这样我们才能将代码与标记整合起来并使其顺畅运作。当然,大多数情况下它只会让人晕头转向。
标记的迷宫
将服务器指令与浏览器标记结合起来实在是一种失误。在Java这方面,其研发团队严格遵循着MVC模式。数据模型被归于一个文件中,用于控制视图的布局结构被归于另外的文件中,而用于构建控制器的逻辑也拥有自己的归属文件。将这些条目区分并隔离开来能够让整个项目变得更有条理。但在PHP方面,最基本的设计思路就是开发者应当将HTML标记与服务器的控制器逻辑杂糅在一起。虽然我们不是没办法把它们区分开——大多数人也确实是这样做的——不过一旦开始专门处理这项任务,很多朋友可能会像我们一样问自己“为什么我们非要用PHP不可?”
命名约定的不一致性与特殊性
大家知不知道我们什么时候需要用到下划线符号?可以看到,base64_encode方法中用到了下划线,但urlencode则没有。此外,php_uname这一名称中使用了下划线,而phpversion则没有。为什么会这样?有没有人考虑过这个问题?大家有没有编辑过API?
与此同时,strcmp函数是不能够大写的,但strcasecmp却可以。另外,strpos不能大写,stripos则可以。到底是其中的字母“i”决定了能否大写,还是函数整体名称决定的?谁能记得住这么多乱七八糟的规则?当然,开发者们必须得记清楚。
灾难般的排序
我们到底需要多少种排序函数?Java拥有一项基础排序函数外加一个适用于所有对象的简单接口。如果大家希望使用其它算法、动手添加进去即可,而且大多数情况下标准函数已经完全够用。而在PHP这边,光是排序函数就能列出一条长长的清单:usort、sort、uksort以及array_sort等等(请注意,其中有一些还需要用到下划线)。所以,请大家马上把这些内容记到小本上,并祈祷自己在实际使用时不会搞混吧。