文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>回:大型系统上PHP令人不爽的九大原因

回:大型系统上PHP令人不爽的九大原因

时间:2006-10-29  来源:webvista

就大型系统,先说一下用PHP的:yahoo!是现在世界访问量最大的网站,他们采用的是PHP,而非JSP或ASP.NET
国内最大的个人电子商务平台taobao也选择了PHP,又没见他们半途改别的 。
里面提到的9点是:
我在过去的四年里一直致力于PHP应用的开发。PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。
下面我会给出我的理由,为什么PHP不适合于比小型业余网站更大的网站。
1. 对递归的不良支持
递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,
PHP并不擅长递归。Zeev,一个PHP开发人员,说道:“PHP
4.0(Zend)对密集数据使用了栈方式,而不是使用堆方式。也就是说它能容忍的递归函数的数量限制和其他语言比起来明显少。”见bug
1901。这是一个很不好的借口。每一个编程语言都应该提供良好的递归支持。
2. 许多PHP模块都不是线程安全的
在几年前,Apache发布了Web服务器的2.0版。这个版本支持多线程模式,在这个模式下,软件一个一部分可以同时运行多个。PHP的发明者说PHP
的核心是线程安全的,但是非核心模块不一定是。但是十次有九次,你想要在PHP脚本中使用这种模块,但这又使你的脚本不能合适Apache的多线程模式。
这也是为什么PHP小组不推荐在Apache 2 的多线程模式下运行PHP。不良的多线程模式支持使PHP常被认为是Apache
2依然不流行的原因之一。
请阅读这篇讨论: Slashdot: Sites Rejecting Apache 2?.
3. PHP 由于商业原因而不健全
通过使用缓存,PHP的性能可以陡增500%[见基准测试]。那么为什么缓存没有被构建在PHP中呢?因为Zend——PHP的制造者,它在销售自己的Zend Accelerator,所以当然,他们不想抛弃自己的商业产品这块肥肉。
但是有另一个可选择的: APC. (Zend后来推出Zend Optimizer,免费的加速器——译者)
4. 没有命名空间
设想某个人制作了一个PHP模块用来阅读文件。模块中一个函数叫做read。然后另一个人的模块可以读取网页的,同样包含一个函数read。然后我们就无
法同时使用这两个模块了,因为PHP不知道你要用哪个函数。
但是有一个很简单的解决方法,那就是命名空间。曾经有人建议PHP5加入这个特性,但不幸得是他没有这么做。现在,没有命名空间,每个函数都必须加上模块
名作为前缀,来避免名称冲突。这导致了函数名恐怖得长,例如xsl_xsltprocessor_transform_to_xml让代码难于书写和理
解。
5. 不标准的日期格式字符
很多程序员对 日期格式字符
都很熟悉,它是从UNIX和C语言中来的。其他一些编程语言采用了这个标准,但是很奇怪的,PHP有它自己的一套完全不兼容的日期格式字符。在C中,“%
j”表示一年中的当天,在PHP中他表示一个月中的当天。然而使事情更混乱的是:Smarty (一个很流行的PHP模版引擎)的 strftime
函数和 date_format 函数,却使用了C/UNIX的格式化字符。
6. 混乱的许可证
你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。错了!例如,如果你想在PHP中生成PDF文件,你会在手册中发现两个模块:PDF 和 ClibPDF。但是这两个都是有商业许可证的。所以,你所使用的每个模块,你都要确保你同意他的许可证。
7. 不一致的函数命名规则
有些函数名称是有多个单词组成的。一般有三种单词组合的习惯:
直接拼接:getnumberoffiles
用下划线分开:get_number_of_files
骆驼法则:getNumberOfFiles
大部分语言选择其中一中。但是PHP都用到了。
例如,你想要把一些特殊字符转换成HTML实体,你会使用函数htmlentities
(直接拼接单词)。如果你要使用相反的功能,你要用到它的小弟弟html_entity_decode。由于某些特殊的原因,这个函数名是由下划线分隔单
词。怎么能这样呢?你知道有一个函数叫strpad。或者他是str_pad?每次你都要查看一下到底这个符号是什么或者直接等他出现一个错误。函数是不
分大小写的,所以对于PHP来说rawurldecode
和RawUrlDecode之间没有什么区别。这也很糟糕,因为两个都使用到了同时他们看上去还不一样,混淆了阅读者。
8. 魔法引用的地狱
魔法引用(Magic
quote)可以保护PHP脚本免受SQL注入攻击。这很好。但是出于某些原因,你可以在php.ini中关闭这个配置。所以你如果要写出一个有弹性的脚
本,你总要检查魔法引用是开启还是关闭。这样一个“特性”应该让编程更简单,而事实上变得更复杂了。
9. 缺少标准框架
一个成长中的网站没有一个整体框架,最终会变成维护的噩梦。一个框架可以让很多工作变得简单。现在最流行的框架模型时MVC-模型,在其中表现层、业务逻辑和数据库访问都分离开了。
很多PHP网站不使用MVC-模型。他们甚至没有一个框架。甚至现在有一些PHP框架同时你都可以自己写一个,关于PHP的文章和手册没有提高框架的一个
字。同时JSP-开发人员使用像Struts的框架、ASP开发人员使用.Net,看起来好像这些概念都广泛被PHP开发人员所了解。这就说明了PHP实
际上到底是多专业。
总结
什么问题?
对于非常小的项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。当你不断地摸索之后,你会发现我提到
的某些问题的解决方案。所以,当解决方案已知之后,为什么不能修正他呢?另外为什么这些修补不在手册中提到呢?
一个开源的语言十分流行是一件好事。但不幸得是,它不是一个伟大的语言。我希望所有的问题能有一天得到解决(也许在PHP6?),然后我们就将拥有一个开
源语言,他既开源,又好用。
到现在,当你要启动一个多于5个脚本页面的项目的时候,你最好考虑C#/ASP.Net 或者 Java/JSP或者也许Python同样是一个更好的选择。
这文章是2004年6月发表在http://www.bitstorm.org/edwin/en/php/ 原来的作者是说他做PHP有6年了,而不只是这里说的4年。但PHP1997诞生,到2004是7年,PHP刚出来就一直在搞PHP,一直在讨厌PHP但是一直在用
1.对递归的不良支持 http://bugs.php.net/bug.php?id=1901
其实这个问题只要用用堆来替换PHP用的栈记数就没问题了啊!为什么多年没换?这不能说它没有对替归的不良支持,因为用栈可以更快,没有一个WEB应用从头到尾只用替归函数来计算吧。用栈记数在WEB应用中已经远够用了,而且还能提高速度,这是不良支持吗?
2. 许多PHP模块都不是线程安全的
    这个应该可以慢慢完善的,向大家说的connet、pconnet都有问题,所以现在除了mysqli,他的connect的处理方式作了本质山的改变,性能应该提高不少吧
3. PHP 由于商业原因而不健全
这个目前是这样,估计会变。
4. 没有命名空间
   5.00不是开始有namespace了吗,后来又去掉了,既然这样就还是应该有他的一定的理由。
    java有namespace, 那jsp有吗? php和jsp是同一个应用级别上的东西。
    有了命名空间你在开发的时候是不是就又多了项任务,自己整理和管理namespace?就算给你加了namespace,我看到是变麻烦了。因为php的编辑器就没有。net和java的强大,帮你完成大多的任务。
5. 不标准的日期格式字符
有几个函数,参数不一样,要是都一样了感觉应该更好办吧!
6. 混乱的许可证
这什么能怪PHP呢?
7. 不一致的函数命名规则
如果是个JAVA程序员肯定会这么说,一个VB程序员不一定会这么说,一个小组里面有自己的命名规则是肯定的,PHP也有《PHP编码规范》,我还是希望PHP有一套函数名规范。我写的时候就喜欢用JAVA 的标准。
8. 魔法引用的地狱
这魔法可以不用吧,去掉算了。
9. 缺少标准框架
Zend Framework开发了,模板smarty比较好,好好学吧,不要说它smarty太大了!应该说要适应企业应用为目标。
我现在用过现在主流的ASP、JSP现在学习PHP,感觉上ASP(包括ASP.NET)和JSP是商业化的
东西很强大,很方便,很规则化,PHP对于一个菜鸟来说感觉相对有些乱,有些业余。但PHP又吸引了我,是他的自由,这一点很不错,用起来像在天上飞,没
有被限制的感觉。
论脚本语言的应用,个人觉得什么都可以的啊非得哪个吗?这种争论是没有意义的。都说ASP是最不安全的,但从我4年的ASP使用中感觉除非你很菜,要不然
也不会有什么可以威胁你的安全啊。PHP就安全吗?你不厉害,一样漏洞百出。至于平台问题,更不用说了,菜鸟和高手差别很大的,要做的好就得努力掌握更多
的知识。所有事情都是相对的,没有绝对健壮的语言,也没有绝对安全的语言和平台,看你自己的喜好了,如果你的网络安全只是差可能UNIX是最好的选择。如
果你是高手,我想你不会害怕HACKER入侵你的WINDOWS SERVER吧。
以上从不同语言角度来讲出问题是,不要怀疑PHP,它就是它,没有什么厉害和不厉害的方面,最主要的是看你自己对PHP的掌握有多少了,如果你达到了源代
码级的使用PHP,那我真佩服你了,那时候也没有什么你觉得PHP不擅长的地方了。我想这里很大一部分人连PHP的源代码编译都不会吧。我们讨论PHP有
什么缺点,有什么用呢?为什么楼主不让大家想想如何通过PHP代码去弥补这些缺陷呢?相反却抱怨这些没用的。如果你觉得PHP有什么缺点可以去官方提出,
在这里讨论不无聊吗?还是你就想让别人支持你的观点,来让你自己的心里感到满足呢?努力去学习吧,反复的锻炼吧!PHP不差的,就看什么人用了,至少我现
在可以说是垃圾级的选手,^_^只会链接数据库。
提个建议,人家PHP.NET不是给你源代码了吗?拿回来找群人自己研究嘛看看能不能自己修改一些,比如函数规则,我们中国程序员就不能为PHP建立标准
了吗?我们可以为它的函数库建立标准嘛。如果觉得哪些地方不好怎么不编写个插件呢?还是你们技术不过关?别争吵了,学习吧,先把PHP掌握的跟我们打字可
以盲打一样(我知道有些人自诩高手,但要写代码时却抱着本书,在我这里你会被开除的),那时候你就会去想办法改造PHP了,怎么改造?自己想吧。
    最后,再次鄙视楼主,知道你会反唇相讥,或删贴,无所谓。只是想让你醒悟一下,希望你不是阿斗。我只是个过客来收集些资料,但觉得这里资料不多,并且也收集完了。所以决定去国外看看,别鄙视我的英文水平,不想让你自卑。
    最最后,希望我们中国德PHP界真的能作出点属于我们中国PHPER的东西来,而不是每天去搞一些让国外高手看起来笑掉大牙的事情,至少我朋友说你们很肤浅,我无语。
我走了,看我的帖子不用气愤,和鄙视,用心去想一下自己该做些什么,曾经玩JSP的时候,有些得意忘形的我被人教育了一次,那厮说了一句话我至今仍然耿耿
于怀但又敬佩————菜鸟不懂所以不敢发言,高手觉得问题太菜所以懒得发言,只有那些半斤八两的油瓶子才喜欢唧唧歪歪,你有盯着自己帖子,看谁不服就咬谁
的那些时间不如去多学些东西吧!我想对我们这些人最适合了!
PHP开发大型系统,开发人员是有点不爽,但还是完整高效的开发出来了,到头来爽的是要开发的人了。LAMP,没出几分钱(只要给开发人员一口饭就可以了)。
再次明确一点,原作者只是说那写问题是“大型系统上PHP令人不爽”,而不说不能实现,我们需要提高自己的PHP技术,也需要一个爽的工具。只要zend引擎解决好了令人不爽的问题了,我们就可以爽快的使用PHP,别的程序员(JAVA,C#)也会和我们一起来用PHP了。
原作者提出的目的是要PHP发展的更完美,但是听者想到另一番的比较多。


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载