网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区



标题: [推荐] 大型系统上PHP令人不爽的9大原因
本主题由 System 于 2008-8-1 05:00 解除限时关闭
naruto
TW中级会员
Rank: 3Rank: 3



UID 92826
精华 12
积分 436
帖子 250
阅读权限 30
注册 2007-3-5
状态 离线
发表于 2007-5-9 14:10 资料 短消息 加为好友
大型系统上PHP令人不爽的9大原因

我在过去的四年里一直致力于PHP应用的开发。PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。下面我会给出我的理由,为什么PHP不适合于比小型业余网站更大的网站…… %\"Z$x+A#d1k;l"`'\
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛&`(Q)l!h7k&t
  我在过去的四年里一直致力于PHP应用的开发。PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。下面我会给出我的理由,为什么PHP不适合于比小型业余网站更大的网站。tech.techweb.com.cn#?3o:X3S(F h;d.u.g,L8n"B
  1. 对递归的不良支持
*N {.m9n F5w r#a  递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,PHP并不擅长递归。Zeev,一个PHP开发人员,说道:“PHP 4.0(Zend)对密集数据使用了栈方式,而不是使用堆方式。也就是说它能容忍的递归函数的数量限制和其他语言比起来明显少。”见bug 1901。这是一个很不好的借口。每一个编程语言都应该提供良好的递归支持。
!X$u7y/v4K  2. 许多PHP模块都不是线程安全的(X%~7b+F"u!L4X$h'w
  在几年前,Apache发布了Web服务器的2.0版。这个版本支持多线程模式,在这个模式下,软件一个一部分可以同时运行多个。PHP的发明者说PHP的核心是线程安全的,但是非核心模块不一定是。但是十次有九次,你想要在PHP脚本中使用这种模块,但这又使你的脚本不能合适Apache的多线程模式。这也是为什么PHP小组不推荐在Apache 2 的多线程模式下运行PHP。不良的多线程模式支持使PHP常被认为是Apache 2依然不流行的原因之一。'O(d(H/u$~
  请阅读这篇讨论: Slashdot: Sites Rejecting Apache 2?.
8M*n:~'`;`+}5i ytech.techweb.com.cn  3. PHP 由于商业原因而不健全$@'S'N7U,g(h9O0E
  通过使用缓存,PHP的性能可以陡增500%[见基准测试]。那么为什么缓存没有被构建在PHP中呢?因为Zend——PHP的制造者,它在销售自己的Zend Accelerator,所以当然,他们不想抛弃自己的商业产品这块肥肉。
q9G-k&K:p*r3r程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  但是有另一个可选择的: APC. (Zend后来推出Zend Optimizer,免费的加速器——译者)*r#y'`2j+`9_#k!]
  4. 没有命名空间
5b#~'H.{*K  设想某个人制作了一个PHP模块用来阅读文件。模块中一个函数叫做read。然后另一个人的模块可以读取网页的,同样包含一个函数read。然后我们就无法同时使用这两个模块了,因为PHP不知道你要用哪个函数。 但是有一个很简单的解决方法,那就是命名空间。曾经有人建议PHP5加入这个特性,但不幸得是他没有这么做。现在,没有命名空间,每个函数都必须加上模块名作为前缀,来避免名称冲突。这导致了函数名恐怖得长,例如xsl_xsltprocessor_transform_to_XML让代码难于书写和理解。tech.techweb.com.cn#])L'M2{5G'q+q"u%L(v.g
  5. 不标准的日期格式字符0A#I!n-[;c0M%_,L
  很多程序员对 日期格式字符 都很熟悉,它是从UNIX和C语言中来的。其他一些编程语言采用了这个标准,但是很奇怪的,PHP有它自己的一套完全不兼容的日期格式字符。在C中,“%j”表示一年中的当天,在PHP中他表示一个月中的当天。然而使事情更混乱的是:Smarty (一个很流行的PHP模版引擎)的 strftime 函数和 date_format 函数,却使用了C/UNIX的格式化字符。
2n,Z5p-K0y  6. 混乱的许可证
&z!q8z"Z;t9|程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。错了!例如,如果你想在PHP中生成PDF文件,你会在手册中发现两个模块:PDF 和 ClibPDF。但是这两个都是有商业许可证的。所以,你所使用的每个模块,你都要确保你同意他的许可证。
.s:P3j2o%A:U  7. 不一致的函数命名规则
9B#e'x*T#Z9g"L'B  有些函数名称是有多个单词组成的。一般有三种单词组合的习惯:8O7n(C#P:y7c9|3U&f5]
  直接拼接:getnumberoffiles$~8p"S-h0J4Z3})P
  用下划线分开:get_number_of_files'u+D(W0}.O/A2i
  骆驼法则:getNumberOfFiles
"Q;f;Y7x"A7X6A  大部分语言选择其中一中。但是PHP都用到了。
)l,K0a*H"a.u/G  例如,你想要把一些特殊字符转换成HTML实体,你会使用函数htmlentities (直接拼接单词)。如果你要使用相反的功能,你要用到它的小弟弟html_entity_decode。由于某些特殊的原因,这个函数名是由下划线分隔单词。怎么能这样呢?你知道有一个函数叫strpad。或者他是str_pad?每次你都要查看一下到底这个符号是什么或者直接等他出现一个错误。函数是不分大小写的,所以对于PHP来说rawurldecode 和RawUrlDecode之间没有什么区别。这也很糟糕,因为两个都使用到了同时他们看上去还不一样,混淆了阅读者。

引用 回复 顶部
naruto
TW中级会员
Rank: 3Rank: 3



UID 92826
精华 12
积分 436
帖子 250
阅读权限 30
注册 2007-3-5
状态 离线
发表于 2007-5-9 14:10 资料 短消息 加为好友
  8. 魔法引用的地狱
&M9r0Q.?1m$M/z7y/Ptech.techweb.com.cn  魔法引用(Magic quote)可以保护PHP脚本免受SQL注入攻击。这很好。但是出于某些原因,你可以在php.ini中关闭这个配置。所以你如果要写出一&s*m5D(k%Y0I
  个有弹性的脚本,你总要检查魔法引用是开启还是关闭。这样一个“特性”应该让编程更简单,而事实上变得更复杂了。
7]%R)X$B;N Dtech.techweb.com.cn  9. 缺少标准框架
"R4U0t&X.B&B-k4h  一个成长中的网站没有一个整体框架,最终会变成维护的噩梦。一个框架可以让很多工作变得简单。现在最流行的框架模型时MVC-模型,在其中表现层、业务逻辑和数据库访问都分离开了。TechWeb-技术社区4b'W%n%^(V#e'V"N
  很多PHP网站不使用MVC-模型。他们甚至没有一个框架。甚至现在有一些PHP框架同时你都可以自己写一个,关于PHP的文章和手册没有提高框架的一个字。同时JSP-开发人员使用像Struts的框架、ASP开发人员使用.net,看起来好像这些概念都广泛被PHP开发人员所了解。这就说明了PHP实际上到底是多专业。
&P7e,s4Y"O!S:g;@&j3NTechWeb-技术社区  总结TechWeb-技术社区 z!Q,F;|-d)Q%d.o
  什么问题?TechWeb-技术社区6F4[!s0y;U/L)v*z7R;P6`
  对于非常小的项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。当你不断地摸索之后,你会发现我提到的某些问题的解决方案。所以,当解决方案已知之后,为什么不能修正他呢?另外为什么这些修补不在手册中提到呢? 一个开源的语言十分流行是一件好事。但不幸得是,它不是一个伟大的语言。我希望所有的问题能有一天得到解决(也许在PHP6?),然后我们就将拥有一个开源语言,他既开源,又好用。
,C1S#q9E:q6o程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  到现在,当你要启动一个多于5个脚本页面的项目的时候,你最好考虑C#/ASP.NET或者 Java/JSP或者也许Python同样是一个更好的选择。

引用 回复 顶部
游客
未注册









发表于 2007-5-9 23:46 资料 短消息 加为好友
我靠,不是吧。。。


引用 回复 顶部
游客
未注册









发表于 2007-5-31 08:49 资料 短消息 加为好友
这个问题好严重啊

引用 回复 顶部
游客
未注册









发表于 2007-6-13 09:06 资料 短消息 加为好友
it's nothing important, small case

引用 回复 顶部
游客
未注册









发表于 2007-7-19 09:59 资料 短消息 加为好友
楼上这么牛人啊

引用 回复 顶部
游客
未注册









发表于 2007-7-25 15:02 资料 短消息 加为好友
楼主,很愿做秀啊。文章中加了不少没用的乱码

引用 回复 顶部
游客
未注册









发表于 2007-10-11 16:38 资料 短消息 加为好友
多少年前的帖子了 ... 顺便把我re在csdn的也转过来得了 。。。

引用 回复 顶部
游客
未注册









发表于 2008-1-10 16:33 资料 短消息 加为好友
枪文,有很多是 使用习惯上的问题,你觉得不爽,但其他人会认为这样很爽

引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 12
积分 8672
帖子 5534
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-1-30 01:46 资料 短消息 加为好友 QQ
写的还是很有号头的

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-8-22 04:37
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.079985 second(s), 8 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP