大型系统上PHP不称职的六个理由(拍砖激辩中)
本文发出后,确实引起不少的争议。看来PHP的支持者不少啊。但是,从一个侧面来审视PHP,也未尝不可。
从php3到php4到PHP5,再到PHP6,PHP确实越来越完善,功能也更强大。PHP为一开放源码项目,其中包括可以简化程序的描述性语言引擎以及一个大的链接库,也有专门开发PHP的公司,如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。尤其是跨平台的使用特性将使它在linux平台大放异彩。可以直接使用java的类库,可以直接调用perl/c等语言写的程序增强了它的可扩展性。越来越成熟的MVC开发框架使它能适应企业级的大型应用开发。再加上它天生强大的数据库支持能力。确实博得了很多用户的喝彩!
不过,这里倒是想从侧面来看看PHP也许不称职的几个理由。
1.应用范围仍然有限与Java相较,PHP可用范畴限制较多,它仅能用在网络服务器上,不像Java,同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。记得有个老友陈述放弃php的原因:“第一:每个变量前面要写一个$符号;?? 第二:因为不是编译执行的方式;? 第三:面向对象的功能不强。”比如,php的oop运行一次就退出,下次还要继续重建o,继续继承....。注意是每一次请求,它不能利用上一次的结果,下一次用还要从头初始化。许多问题的根源还在于apache。
再一个:“可能目前php?? IDE不是很好,给别人入门难的感觉。”尽管新版本增加了面向对象功能,但相比成熟的Java,仍然有许多待改进之处。以至于有人这么归纳: (1)缺乏广泛的使用,以至于微软也要和大家讨论PHP到ASP.Net的迁移。(2)缺乏大公司的支持,象IBM的开发中心开源项目首页上的6个标题中,PHP只有3个。 (3)缺乏重量级的应用,象Google和Yahoo用PHP(不是所有的产品)都是瞎玩。当然,我知道Taobao.com也是PHP做的。
2.调试还是不太方便在apache上的进程工作模式。 apache处理每一个php请求,都要创建一个子进程,这样的话实现连接池比较困难了,进程间的数据共享一般只能通过文件,数据库什么的完成,各项开销比较大,当然速度并不低。
还是陈述一个网友的发言:“没有好的开发工具,调试起来过于复杂。虽然zend不错,但是哪里是VS的对手。没有强大的Visual 开发工具,换句话,如果有了,我绝对选择PHP。”这好像是和Java早期比较类似的一个情形。也许,在不远的未来,我们会看到很好的调试工具。问题是:现在还没有太称心的,尤其是大型系统上。
还有个问题,就是共享内存的使用,我就不知道为什么直接使用php操作共享内存就这么复杂,而且速度居然比直接操作磁盘文件还慢。
3.主流版本的安全漏洞百出看一个最近的新闻,和Php pdflib扩展绕过open_basedir安全限制漏洞有关。受影响系统:PHP PHP 5.3.0。PHP所使用的PDFLib扩展没有正确的强制基础PHP配置指令,这允许攻击者绕过open_basedir限制在非授权位置写入文件。仅在多个用户可以创建和执行任意PHP脚本代码的共享托管配置中才会出现这个漏洞。在这种情况下,open_basedir限制应彼此隔离用户。
PHP V6 在添加一些新特性的同时,也删除了以前版本中的一些函数和特性。被删除的大部分东西,比如 register_globals 和 safe_mode,在当前的 PHP 中都被广泛认为是 “有漏洞的”,因为它们可能招致安全风险。当然,PHP的配置非常灵活,可以通过php.ini, httpd.conf, .htaccess文件(该目录必须设置了AllowOverride All或Options)进行设置,还可以在脚本程序里使用ini_set()及其他的特定的函数进行设置。通过phpinfo()和get_cfg_var()函数可以得到配置选项的各个值。
? 1.?? 面向对象不足??
? 如果你使用过PHP 5的话,你就不会这样说了,你所想到的东西:访问权限(public/private)、继承、抽象类、接口、克隆、串行化、自动垃圾收集、静态成员、强大的异常处理...??
? 可以说基本上常见的面向对象的东西都有了,不要以为php5很遥远,其实目前有很多人、很多项目都在使用PHP 5,你最好自己尝试一下看看。??
? 建议参考:??
? http://www-128.ibm.com/developerworks/cn/opensource/os-phpobj/??
? http://www-128.ibm.com/developerworks/cn/opensource/os-advphpobj/??
? 2.?? 变量名前面加?? $???
? 这个只能算是一个小问题,是PHP告诉大家这是PHP独特特征的地方,PHP不是Java,不是C++,它是从开源世界走出来的脚本语言,有了$,我觉得很亲切,很棒。??
? 3.?? 不是编译执行??
? 这个当然比不上CGI了,如果你用C写CGI的化,但是我想,PHP的执行速度不会比JSP差到哪里去的吧,也不会比ASP慢。另外,Zend有相关的商业工具来作类似于编译的工作。??
? 4.?? PHP太灵活??
? 我想,谁都比较喜欢能够自由控制的语言,这样才能体现程序员的技术,当然,灵活也会带来很多问题,比如很容易出错,而且不容易找到,对于初学者的代码可能会写的很糟糕。但是,这就是PHP呀,这才是我们心目中开源的、自由的、高效的PHP??
? 5.?? 没有MVC框架??
? 呵呵,如果你使用过?? phpCake、Zend?? frame的话,我想你不会说没有框架,只是成熟程度的问题,其实Cake和Zend?? frame都非常棒,当然,另外一些象?? Prado、phpMVC等框架也是值得一提的??
? 参考:http://framework.zend.com/、http://cakephp.org/??
? 6.?? 没有好的IDE??
? PHP的特点就是简单,容易开发,你可以使用记事本,vi,也可以使用Editplus、UE,同样也可以使用Nu、Zend等等工具,选择很大,其实不要跟VS2003比较,因为他们不是一个东西,VS是个统一开发平台,PHP只是一门脚本语言,使用Zend已经足够了,至少我是这么觉得。??
? 7.?? 扩展不容易写??
? 呵呵,我想ASP的com也不是那么好写的,JSP里面的JavaBeans也不是那么简单的,没有很容易的事情,简单或者复杂程度取决于你对一项事务的认识程度。如果你C学的好,你就不会觉得扩展不好写。当然,相对来说,用C写PHP扩展是稍微有点复杂,不过,因为复杂,所以你才能靠写扩展拿高薪呀,呵呵。??
? 建议参考:《PHP程序设计》第十四章[扩展PHP]??
? 8.?? 调试不方便??
? 我不知道怎样算是调试方便,如果你使用过ruby、perl写cgi,你会知道什么是调试不方便。如果你喜欢写C,使用GDB之类的命令行工具,你会知道什么是不方便。当然了,相对来说,你使用好的IDE,调试的工作量会减少很多的。?