我正在阅读杰夫阿特伍德的文章"PHP糟透了,但它并不重要".
他在评论中写道:
也就是说,我绝对认为PHP开发人员必须了解PHP的架构限制,并了解其他选择.
这些限制是什么?它们与其他脚本/弱类型语言相比如何?
此外,在需要避免限制的情况下,有哪些替代方案?
Nik*_*kiC 29
我看到基本上有两个真正的限制:
PHP是一种完全同步的语言.这会对您可以在PHP中轻松实现哪些内容产生影响,哪些不会.例如,实现Long Polling驱动的聊天应用程序并非易事,因为PHP每个聊天程序需要一个进程块.我不是说这是不可能的,你可以使用一些PHP守护进程库来解决这个限制.我只是说这是其他语言(如JavaScript)更合适(NodeJS)的情况之一.
PHP很慢.请不要理解这是一种冒犯.事实上,与其他脚本语言相比,PHP(由Zend实现)速度较慢.这通常在构建网站时没有问题,但你显然无法做某些事情:在PHP中实现光线跟踪器绝对是个坏主意 - 而在JavaScript中你可以做到这一点.
但除此之外,我认为PHP非常多用途.几乎任何东西都可以使用它 - 而且我确实如此;)
Pav*_*gin 20
看看日期.这篇文章写于2008年.
这意味着,如果你看到PHP5.3的优点,你会发现很多东西,比如闭包和命名空间,以前用过其他语言.其中一些已经影响了着名框架的架构,如Symphony.
那个清单永远不会完整.
与此同时,我遇到很多人认为"弱打字"语言本身就是一个建筑问题.
然后,有些人认为内联正则表达式语法在例如JavaScript中是好事,但其他人认为,"不同的语言"必须在字符串常量中写下来,就像在PHP中一样.等等.
cor*_*ard 15
我会在没有深入了解细节的情况下对此进行一次尝试:
我相信我会踩到某人的脚趾,我会得到任何愤怒的暴徒,但我也确信我仍然没有击中一切.这在很大程度上是主观的,但是当你将PHP堆叠在Ruby或Python旁边时,很容易看出什么是不喜欢的.
Mic*_*.V. 14
我不觉得所有"PHP SUCKS"文章都来自习惯于已建立的Microsoft技术的开发人员.
我发现奇怪的是表明PHP是意大利面条代码的陈述.这完全取决于代码的作者,代码是意大利面条还是在处理问题时它会使用某些设计规则.
许多PHP代码的原因是意大利面条代码是因为示例和教程是这样的,他们不会教初学者良好的编码实践.此外,人们可以快速掌握像hello world
MySQL这样的示例,连接到MySQL,进行查询和循环结果 - 但就是这样,这就是所有教程停止的地方.我还没有找到涵盖以下内容的教程:
正如你所看到的,初学者程序员不会费心去学习上面列出的所有这些要点,我知道因为我也是初学者并且做过初学者所犯的所有错误.但是,即使有人不知道如何编程,他们仍然可以创建有用的应用程序.
许多流行的脚本是由谁知道人写什么,他们想要实现的,但是他们不知道如何正确地设计中,他们将部署他们的PHP代码的环境(框架).这就是为什么我们看到脚本变得非常受欢迎,因为它们作为普通用户很容易使用,很难扩展为开发人员,使用奇怪的函数名称,奇怪的编码约定和没有注释.
还有,荒谬的是说PHP很慢,这绝对是胡说八道.当我遇到这样的陈述时,我想要自己开头阅读这样的博客文章.
PHP是一种脚本语言,这意味着解释器中调用每次有人请求一个PHP页面这需要时间大量的 CPU处理能力.这已经通过使用诸如APC的字节码缓存机制来解决,该机制将脚本的预解释片段的副本存储在存储器中.结果是令人印象深刻的,我不会欺骗你 - 我的一些脚本的执行时间从20毫秒到1微秒,其中一些只"受益"5次.这是一个为1千个并发用户提供服务的系统.现在,如果有人想告诉我1微秒很慢(或5毫秒) - 我会把它当作废话.
PHP不是提供网页所涉及的唯一内容.还有底层服务器(Apache)有自己的问题,MySQL运行查询 - 谁说所有查询都是最优的?有网络,有硬盘,有CPU,还有很多其他进程.使用PHP-FPM配置Apache,优化MySQL以便在8核计算机上运行16 GB的ram,使用APC,使用Memcache - 瞧,您将获得一个非常快速,可扩展的系统,能够提供令人难以置信的流量.与PHP进行比较的语言通常被"编译"到字节码中,然后执行
您可以自己扩展PHP.假设PHP函数很慢,NOTHING会阻止任何人在C中创建一个能够更快地完成工作然后通过PHP中的扩展来挂钩所有内容的.so.并不是说我知道这样的工作需要什么,但这样的事情是可能的.
可悲的是,我悲伤地说,因为我尊重某些程序员并欣赏他们的工作(而且我决不是一个PHP粉丝)但是当我看到一个传播错误信息的工具没有受过教育,缺乏经验和主观评论时,它会让我受伤.
至于为什么大型网站使用PHP - 因为它很快.因为他们在开始项目之前奠定了适当的基础.因为它是免费的,可扩展的和可扩展的.因为它遵循C语法.因为您可以在需要时更快地扩展它.因为它运行在免费的操作系统上.因为它易于使用.