为什么说用PHP开发大型系统令人不爽

为什么说用PHP开发大型系统令人不爽

来自:太平洋电脑网

笔者在过去的四年里一直致力于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同样是一个更好的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 有人可能会 "PHP是世界上最好的语言" 是因为他们对PHP有很深的了解并且认为PHP具有许多优秀的特性。 其中一些原因可能包括: - PHP是一种解释型语言, 可以直接在Web服务器上运行, 这对于Web开发非常方便。 - PHP提供了丰富的内置函数库, 可以帮助开发者快速完成各种常见的任务, 如处理表单数据、操作数据库、发送电子邮件等。 - PHP拥有广泛的社区支持, 有许多开源库可供使用, 这使得开发者能够轻松地扩展PHP的功能。 - PHP可以与许多流行的数据库系统集成, 如MySQL, PostgreSQL和SQLite, 这使得PHP非常适合用于数据库驱动的Web应用程序开发。 当然, 不同的人可能会有不同的看法, 并不是所有人都认为PHP是世界上最好的语言。每种编程语言都有自己的优缺点, 在选择使用哪种语言时应考虑自己的需求和目标。 ### 回答2: 有人会"PHP是世界上最好的语言"是因为PHP语言有其特殊的优点和广泛的应用场景。 首先,PHP是一种表现力强,易学易用的脚本语言。相比其他语言,PHP的语法简洁明了,容易理解和掌握。即使是初学者也能快速上手,并能够快速开发出功能完善的网站和Web应用程序。 其次,PHP是一种开源语言,且拥有庞大的、活跃的社区支持。这意味着无论是在问题解决、学习资料获取、代码库分享等方面,PHP都能够提供丰富的资源和支持。这也使得PHP的更新和改进持续进行,并能够及时跟上技术的发展趋势。 此外,PHP有着广泛的应用场景。它可以用于开发各种类型的网站和Web应用程序,从简单的个人博客到复杂的电子商务平台都可以实现,且与其他技术的整合也相对容易。由于PHP运行速度快,而且跨平台兼容性好,它很适合用于构建高并发、大流量的网站。 在互联网发展迅速的今天,PHP被广泛应用于网站建设,成为许多大型企业和知名平台的首选开发语言,如Facebook、Wikipedia等。这也是有些人称PHP为世界上最好的语言的原因之一。 总而言之,人们之所以称PHP为世界上最好的语言,是因为它的简单易用性、丰富的社区资源、广泛的应用场景以及其被广泛应用于众多知名平台。当然,每种语言都有其优点和适用场景,最好的语言是因人而异的。 ### 回答3: 有人会"PHP是世界上最好的语言"可能是出于以下几个原因。 首先,PHP是一种开源的、跨平台的服务器端脚本语言,广泛应用于Web开发。它具有简单易学的语法,使得初学者能够快速上手,同时也具备强大的功能和灵活性,满足了开发人员的不同需求。 其次,PHP支持多种数据库(如MySQL、Oracle等)和操作系统(如Windows、Linux等),并且与HTML紧密集成,使得开发人员能够轻松地创建交互性强、动态性好的网页和应用程序。 此外,PHP拥有庞大的开发者社区和丰富的第三方库和框架,使得开发过程更加高效便捷。PHP社区提供了大量的资源和支持,开发者可以交流经验,相互帮助。 最后,由于PHP的普及度高,许多知名的网站和应用程序都是用PHP开发的,如Facebook、Wikipedia等。这些成功案例加强了人们对PHP的信任和好评,进而加深了对PHP的认可。 尽管PHP有其优点,但并不意味着它是世界上最好的语言。每种编程语言都有其适用的场景和特点,选择最佳语言取决于具体的需求和目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值