门头沟信息港
养生
当前位置:首页 > 养生

1对递归的不良支持

发布时间:2019-07-11 23:21:09 编辑:笔名

PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。下面我会给出我的理由,为什么PHP不适合于比小型业余站更大的站。

1. 对递归的不良支持

递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,PHP并不擅长递归。Zeev,一个PHP开发人员,说道:PHP 4.0(Zend)对密集数据使用了栈方式,而不是使用堆方式。也就是说它能容忍的递归函数的数量限制和其他语言比起来明显少。见bug 1901。这是一个很不好的借口。每一个编程语言都应该提供良好的递归支持。

2. 许多PHP模块都不是线程安全的

在几年前,Apache发布了Web服务器的2.0版。这个版本支持多线程模式,在这个模式下,软件一个一部分可以同时运行多个。PHP的发明者说PHP的核心是线程安全的,但是非核心模块不一定是5 鞘 斡芯糯危 阆胍 赑HP脚本中使用这种模块,但这又使你的脚本不能合适Apache的多线程模式。这也是为什么PHP小组不推荐在Apache 2 的多线程模式下运行PHP。不良的多线程模式支持使PHP常被认为是Apache 2依然不流行的原因之一。

3. PHP 由于商业原因而不健全

通过使用缓存,PHP的性能可以陡增500%[见基准测试]。那么为什么缓存没有被构建在PHP中呢?因为ZendPHP的制造者,它在销售自己的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注入攻击。这很好。但是出于某些原因,你可以在i中关闭这个配置。所以你如果要写出一个有弹性的脚本,你总要检查魔法引用是开启还是关闭。这样一个特性应该让编程更简单,而事实上变得更复杂了。

9. 缺少标准框架

一个成长中的站没有一个整体框架,终会变成维护的噩梦。一个框架可以让很多工作变得简单。现在的框架模型时MVC-模型,在其中表现层、业务逻辑和数据库访问都分离开了。

很多PHP站不使用MVC-模型。他们甚至没有一个框架。甚至现在有一些PHP框架同时你都可以自己写一个,关于PHP的文章和手册没有提高框架的一个字。同时JSP-开发人员使用像Struts的框架、ASP开发人员使用.net,看起来好像这些概念都广泛被PHP开发人员所了解。这就说明了PHP实际上到底是多专业。

总结

什么问题?

对于非常小的项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。当你不断地摸索之后,你会发现我提到的某些问题的解决方案。所以,当解决方案已知之后,为什么不能修正他呢?另外为什么这些修补不在手册中提到呢? 一个开源的语言十分流行是一件好事。但不幸得是,它不是一个伟大的语言。我希望所有的问题能有一天得到解决(也许在PHP6?),然后我们就将拥有一个开源语言,他既开源,又好用。

到现在,当你要启动一个多于5个脚本页面的项目的时候,你考虑C#/或者 Java/JSP或者也许Python同样是一个更好的选择。

鞍山的治癫痫专科医院
临沂产前诊断科医院哪家好
昌吉有哪些男科医院
台州有哪些心胸外科医院
友情链接
宝宝感冒发烧反复是怎么回事 小孩发烧物理降温 小孩发烧怎么回事 宝宝咳嗽特别厉害 宝宝有痰咳不出来怎么办 孩子感冒吃什么药 孩子嗓子有痰怎么办 孩子夜间咳嗽厉害怎么办 婴儿感冒咳嗽流鼻涕怎么办 小孩发烧39度严重吗 丁桂薏芽健脾凝胶怎么样 3岁宝宝口臭怎么消除 孩子中暑症状 小孩流鼻血是什么原因 宝宝睡觉出汗 芪斛楂颗粒怎么样 孩子不爱吃饭怎么办 宝宝晚上睡觉出汗 小孩手心出汗 宝宝吃退烧药多久能退烧 宝宝反复高烧 小孩发烧多少度吃退烧药 小儿反复发烧怎么办 宝宝突然发烧 七个月宝宝咳嗽怎么办 小孩咳嗽一个月了还没好怎么办 小孩干咳 宝宝大便干 孩子发烧怎么办晚上 宝宝发热手脚冰凉怎么办 小孩干咳嗽吃什么好的快一点 宝宝经常便秘怎么办 孩子连续6天发烧正常不 小孩反复咳嗽 五个月的宝宝咳嗽怎么办 孩子感冒发烧怎么办 儿童发烧怎么办 宝宝晚上咳嗽厉害怎么办 孩子晚上睡觉咳嗽厉害怎么办 宝宝抗病毒的药有哪些 小儿发烧39度怎么办 小孩反复发烧 儿童发烧怎么退烧最快 孩子咳嗽吃什么药效果好 孩子便秘怎么办 宝宝持续发烧不退是什么原因 小孩咳嗽怎么办 小孩反复高烧是怎么回事 平凉疼痛科医院哪家好 安顺疼痛科医院哪家好 石嘴山小儿康复科医院哪家好 乌鲁木齐室缺医院哪家好 克拉玛依青光眼医院哪家好 阳泉有哪些结核病科医院 哈密手外科医院哪家好 长治有哪些白内障医院 克州牙体牙髓科医院哪家好 伊犁急诊科医院哪家好 吕梁有哪些口腔急诊科医院 吕梁有哪些结核病科医院 伊犁内分泌外科医院哪家好 阿勒泰小儿妇科医院哪家好 铜川有哪些体检科医院 阿勒泰干部诊疗科医院哪家好 五家渠烧伤科医院哪家好 五家渠白内障医院哪家好 三亚眼整形医院哪家好 万宁妇科内分泌医院哪家好 赣州有哪些感染内科医院 屯昌肝病科医院哪家好 长春有哪些小儿感染科医院 陵水小儿心内科医院哪家好 琼中儿童口腔科医院哪家好 西宁医学影像学医院哪家好 白山有哪些中医妇产科医院 松原有哪些骨关节科医院 黄南肝胆外科医院哪家好 行业动态 高血脂 衣原体 直肠息肉 后牙反合 怀孕晚期吃什么 减肥食谱大全 丙肝 雀斑症状 上火小组话题 外痔治疗 卡路里小组话题 前庭大腺炎 斜视 沙眼 无痛人流 美白方法 外阴疾病发病原因 引起风湿病的原因 河源有哪些老年病科医院 河源有哪些体检科医院 清远有哪些营养科医院 清远有哪些神经外科医院