快速业务通道

难道研究PHP的人都是傻瓜吗?

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-16

抱怨你的工具,并不会让你的事情做得更好。

我前一篇的「PHP 开发迷思 (叁) – PHP 很糟糕?」,有网友写了一篇「 PHP 很烂」来回应。

我想说的是:对他来说, PHP 的确很糟,所以真的不适合他;因为他引用了别人停留在三四年前的 PHP 的观念来证明他对 PHP 的看法。还有,他看到的都是烂 PHP 程序。

不可否认, PHP 的确在先天上有所不足,只因为它诞生的太早,很多包袱无法轻易摆脱。即便 PHP 6 将会摆脱这些束缚,但时间点似乎太晚?

所以呢?难道研究 PHP 的人都是傻瓜吗?

当然不是。

我不想为 PHP 平反什么,我也不认为我能改变多少人对 PHP 的看法。这裡我只想把这些人认为 PHP 烂的地方做个说明,剩下的就交给大家自行评断。

版本问题

从 PHP 诞生以来有十五年了,真正被大家重视而开始运用的第 4 版则有十年了。

然而随着 PHP 5 的诞生,以及 2008 年 PHP 4 不再被官方维护,大部份的主机商也已经部署了 PHP 5 作为主要执行环境;虽然现阶段 PHP 5 还是会让 PHP 4 的程序能够执行,但是开发者的观念如果没有一起随着更新,那才是灾难的开始。

语言的设计本来就没办法一开始考虑周详, Java 如此, Python 也是如此,它们在重大改版时,部份语法及相关的核心组件上本来就会有所改变。而开发者如果没有适时去了解在新版本上的使用差异,那么跟抱怨一把生锈的斧头很难砍倒一棵大树有什么差别?

Unicode

Unicode 在最近这几年才开始被台湾的开发者所重视,在那之前 BIG5 大概是他们的恶梦吧。

先不管 PHP ,我们来看一下别的语言怎么处理 Unicode 。

Ruby: 就我粗浅的了解, Ruby 本身也不完整支援处理 Unicode ,但还是可以处理。

Python: 在 2.x 版也是透过 unicode 类别来处理,在 3.0 核心有直接支援。

那么 PHP 呢?

的确 PHP 本身没有很方便的方法来处理 Unicode ,但是不表示它不能用其他方法来处理:

mbstring: 多位元组的字串处理

iconv: 转换编码

PHP 6 以后则是直接把 unicode 放到核心函式裡。

当然 PHP 先天的限制,会让它在处理 Unicode 字串上无法像 Ruby 和 Python 那么直觉;但不表示我们不能透过其他方法将它封装起来,方便后续的开发。

在资料库上的 Unicode 问题也是如此, PHP 本身不处理这些,它只是透过 client 来取得资料库回传的资料,这在每个语言对资料库的实作都是一样的。

Magic Quotes

一开始 PHP 有 magic_quotes 只是为了方便处理要塞入资料库的字串,因为当时 PHP 开发者对于程序与资料库之沟通非常不熟悉。

然而,这只是资料分层处理的观念。

事实上我们根本不该对接收下来的资料做假设,如果输入的资料是「许功盖 (BIG5) 」,就让它保持「许功盖 (BIG5) 」;等到要存入资料库时,再让真正的资料操作函数 (或物件) 去处理它 (像是 PDO::quote ) ,而不是再用 addslashes() 或 stripslashes() 这种别扭的方式来存取资料库。

而从资料库取得资料时也是一样,因为我们用正确的方法塞入,所以它也会回传我们正确的资料,这在所有语言都是一样的!

所以后来的 PHP 5.3 版本就将 magic_quotes 废弃, PHP 6 则直接不支援。

而在这之前的版本所开发出来的程序,也都是该以 magic_quotes 保持关闭的状态来开发;遇到不确定 magic_quotes 是否开启时,可以参考官方手册的建议来取消它对程序的影响。

SQL Injection

某网友说:「填‘; shutdown — 就能打挂一票网站…,九成可能都是 PHP 写的」,又说「我知道 SQL (Injection) 是跨语言的问题,但是 PHP 就是偏偏特别容易写出有洞的程序 像这样 “SELECT * FROM User WHERE id = $user_id” 然后就毁了。」

我个人倒认为,有九成以上会有 SQL Injection 问题的,可能是传统的 ASP 网站。 (这边 ASP 只是举例,不表示真的九成以上都是这样;事实上没有引用一个正确的统计数字,这都只是嘴炮而已,请塬谅我用这么粗俗的字眼)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号