返回   CHF站长论坛 > 综合讨论区 > 网站开发与设计

网站开发与设计 网页设计、网站开发、网站维护与调试交流区。

双至强仅二千,企商在线,最早租用商 魔兽世界私服 魔兽世界私服 此文字广告位招租 天龙八部私服 传奇世界私服 新开传奇私服
传奇私服 热血江湖私服 全球最新的创意科技产品 魔域私服 魔域私服 新开传奇私服 魔域私服 传奇私服
发表新主题 回复
 
主题工具 主题评分 显示模式
旧 2006-02-22, 10:03   #1 (页面定位)
Tameway
 
Tameway 的头像
 
注册日期: 2005-09-06
住址: 湛江/西安/深圳
帖子: 1193
Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人
默认 为什么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同样是一个更好的选择。


江南派 | Tameway
Tameway 当前离线   回复时引用此帖
旧 2006-02-22, 10:04   #2 (页面定位)
小叶
 
注册日期: 2005-09-04
住址: 火星人
帖子: 17760
小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星
默认

php。,,I love it。。


匆匆人生中,你做了几件令自己骄傲的事呢?
小叶 当前离线   回复时引用此帖
旧 2006-02-22, 10:18   #3 (页面定位)
Tameway
 
Tameway 的头像
 
注册日期: 2005-09-06
住址: 湛江/西安/深圳
帖子: 1193
Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人
默认

事实上我觉得ASP才是正统的WEB脚本

打倒PHP帝国主义


江南派 | Tameway
Tameway 当前离线   回复时引用此帖
旧 2006-02-22, 10:19   #4 (页面定位)
Tameway
 
Tameway 的头像
 
注册日期: 2005-09-06
住址: 湛江/西安/深圳
帖子: 1193
Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人Tameway 是一个将要出名的人
默认

从大环境决定了PHP的上限。


江南派 | Tameway
Tameway 当前离线   回复时引用此帖
旧 2006-02-22, 10:36   #5 (页面定位)
wm_chief©
 
wm_chief 的头像
 
注册日期: 2005-09-05
帖子: 17801
wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀wm_chief 有着人尽皆知的贡献和荣耀
默认

每个语言都有自己的优缺点,至于上面多数条件没有从php本身的开发环境出发。php是世界开发者一起开发的。所以要给他一个标准是很难的。不过php的框架确实有待开发者的开发(可能是因为太多人一起开发同一产品的原故,不容易产生一个标准)。


当然对于程序员来说语言本身就是工具。更主要还是要加强自己的编程思想

此帖于 2006-02-22 10:41 被 wm_chief 编辑.
wm_chief 当前在线   回复时引用此帖
旧 2006-02-22, 13:34   #6 (页面定位)
gavin
 
注册日期: 2006-02-22
帖子: 8
gavin 是普普通通的会员
默认

成败在人。。。
gavin 当前离线   回复时引用此帖
旧 2006-02-22, 14:22   #7 (页面定位)
小叶
 
注册日期: 2005-09-04
住址: 火星人
帖子: 17760
小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星
默认

引用:
作者: Tameway
事实上我觉得ASP才是正统的WEB脚本

打倒PHP帝国主义...
寒了。。。
建议你去开源世界看看哦。。


匆匆人生中,你做了几件令自己骄傲的事呢?
小叶 当前离线   回复时引用此帖
旧 2006-02-23, 11:12   #8 (页面定位)
redhat028
 
注册日期: 2005-11-07
帖子: 79
redhat028 是普普通通的会员
默认

引用:
作者: 小叶
寒了。。。
建议你去开源世界看看哦。。
有人说PHP是帝国主义有什么不好呢,哈哈
redhat028 当前离线   回复时引用此帖
旧 2006-02-23, 11:22   #9 (页面定位)
老鬼
版主
 
老鬼 的头像
 
注册日期: 2005-08-30
住址: 地球
帖子: 12523
老鬼 的声望功能已被禁用
默认

有免费这两个字就够了,免费可以让我们容忍他的很多缺点
老鬼 当前离线   回复时引用此帖
旧 2006-02-23, 18:03   #10 (页面定位)
8989
 
注册日期: 2005-12-01
帖子: 84
8989 是普普通通的会员
默认

PHP因为开源和免费 所以用来起步是非常不错的

不过对于大型系统 还是不用PHP好 嘿嘿
8989 当前离线   回复时引用此帖
旧 2006-02-23, 19:20   #11 (页面定位)
小叶
 
注册日期: 2005-09-04
住址: 火星人
帖子: 17760
小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星小叶 是一位成功的新星
默认

引用:
作者: 8989
PHP因为开源和免费 所以用来起步是非常不错的

不过对于大型系统 还是不用PHP好 嘿嘿...
alibaba。com够大,淘宝够大,
sf.net咋样,phpclass
还有好多拉。。寒死了,说php不行。


匆匆人生中,你做了几件令自己骄傲的事呢?
小叶 当前离线   回复时引用此帖
旧 2006-02-23, 19:26   #12 (页面定位)
lonely
 
lonely 的头像
 
注册日期: 2005-12-08
帖子: 685
lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了lonely 已经是超级明星了
默认

楼主木j.j
lonely 当前离线   回复时引用此帖
旧 2006-02-26, 04:40   #13 (页面定位)
小混混
 
小混混 的头像
 
注册日期: 2005-12-01
住址: 上海
帖子: 17
小混混 是普普通通的会员
默认

貌似主题不回帖,楼主没有了解PHP特性。
小混混 当前离线   回复时引用此帖
回复

书签

标签

主题工具
显示模式 对此主题评分
对此主题评分:



所有时间均为北京时间。现在的时间是 12:48