为什么PHP不适合于比小型业余网站更大的网站
2021-02-01
为什么用PHP开发大型系统感到不舒服?
来自:太平洋计算机网络
在过去的四年中,作者一直致力于PHP应用程序的开发。 PHP确实很容易编写。但是PHP也有一些非常严重的缺陷。
以下作者将给出我自己的理由,为什么PHP不适合于比小型业余网站大的网站。
1.对递归的支持不佳
递归是一种函数调用自身的机制。这是一项强大的功能,可以使某些复杂的事情变得非常简单。使用递归的一个示例是quicksort(quicksort)。不幸的是,PHP不擅长递归。 PHP开发人员Zeev说:“ PHP4.0(Zend)使用堆栈方法处理密集数据,而不是使用堆方法。也就是说,与之相比,它可以容忍的递归函数数量有明显的限制。其他语言。更少。”请参见错误1901。这是一个非常不好的借口。每种编程语言都应提供良好的递归支持。
2.许多PHP模块不是线程安全的
几年前,Apache发布了Web服务器的2.版本0。该版本支持多线程模式,在这种模式下,软件的一部分可以同时运行多个。 PHP的发明者说,PHP的核心是线程安全的,但非核心模块不是必需的。但是,十分之九,您想在PHP脚本中使用此模块,但这使您的脚本不适用于Apache的多线程模式。这就是为什么PHP团队不建议在Apache 2的多线程模式下运行PHP的原因。糟糕的多线程模式支持使PHP经常被认为是Apache 2仍然不受欢迎的原因之一。
请阅读以下讨论:Slashdot:网站拒绝Apache 2吗?。
3.由于商业原因,PHP不健全
通过使用缓存,PHP的性能可以显着提高500%[请参阅基准测试]。那么为什么缓存没有内置在PHP中呢?由于PHP的制造商Zend正在出售自己的Zend Accelerator,因此,他们当然不想放弃他们的商业产品。
但是还有另一种选择:APC。 (Zend后来推出了Zend Optimizer,这是一个免费的加速器-翻译器)
4.没有命名空间
想象一下有人制作了一个PHP模块来读取文件。模块中的功能称为读取。然后,另一个人的模块可以读取网页,该网页还包含读取的功能。然后,我们不能同时使用这两个模块,因为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之间没有区别。这也很糟糕,因为两者都被使用并且外观不同php开发是什么,这会使读者感到困惑。
8.魔术引号的地狱
魔术引号可以保护PHP脚本免受SQL注入攻击。很好但是由于某些原因,您可以在php.ini中关闭此配置。因此,如果要编写灵活的脚本php开发是什么,则始终必须检查魔术参考是打开还是关闭。这样的“功能”应该使编程更容易,但实际上它变得更加复杂。
9.缺乏标准框架
一个没有整体框架的成长中的网站最终将成为维护的噩梦。框架可以使很多工作变得容易。最受欢迎的框架模型是MVC模型,其中表示层,业务逻辑和数据库访问均分开。
许多PHP网站都不使用MVC模型。他们甚至没有框架。即使现在有一些PHP框架,您也可以自己编写。有关PHP的文章和手册并未改进该框架。同时,JSP开发人员使用Struts等框架,而ASP开发人员使用.Net。这些概念似乎已被PHP开发人员广泛理解。这说明了PHP实际上是多么专业。
摘要
出什么问题了?
对于非常小的项目,它可能是一种非常令人满意的编程语言。但是对于更大,更复杂的项目,PHP表现出了它的弱点。继续探索之后,您将找到作者提到的一些问题的解决方案。因此,当解决方案已知时,为什么不能更正呢?另外,为什么手册中未提及这些修复程序?
开源语言非常流行是一件好事。不幸的是,这不是一门好语言。作者希望所有问题都能在一天之内解决(也许在PHP6中?),然后我们将拥有一种既开源又易于使用的开源语言。
到目前为止,当您要启动一个包含5个以上脚本页面的项目时,最好考虑使用C#/ ASP.Net或Java / JSP,或者也许Python也是更好的选择。