PHP的架构限制是什么?

svi*_*irk 32 php architecture

我正在阅读杰夫阿特伍德的文章"PHP糟透了,但它并不重要".

他在评论中写道:

也就是说,我绝对认为PHP开发人员必须了解PHP的架构限制,并了解其他选择.

这些限制是什么?它们与其他脚本/弱类型语言相比如何?

此外,在需要避免限制的情况下,有哪些替代方案?

Nik*_*kiC 29

我看到基本上有两个真正的限制:

PHP是一种完全同步的语言.这会对您可以在PHP中轻松实现哪些内容产生影响,哪些不会.例如,实现Long Polling驱动的聊天应用程序并非易事,因为PHP每个聊天程序需要一个进程块.我不是说这是不可能的,你可以使用一些PHP守护进程库来解决这个限制.我只是说这是其他语言(如JavaScript)更合适(NodeJS)的情况之一.

PHP很慢.请不要理解这是一种冒犯.事实上,与其他脚本语言相比,PHP(由Zend实现)速度较慢.这通常在构建网站时没有问题,但你显然无法做某些事情:在PHP中实现光线跟踪器绝对是个坏主意 - 而在JavaScript中你可以做到这一点.

但除此之外,我认为PHP非常多用途.几乎任何东西都可以使用它 - 而且我确实如此;)

  • @epitaph:这就是为什么我说"PHP - 由Zend实现 - 很慢".我知道有其他PHP实现,比如来自Facebook的实现,更快(但有其他缺点).但通常情况下,如果人们说"PHP"就意味着Zend的PHP.PS:说Chrome快速发展是非常不公平的.所有现代浏览器的JS引擎几乎同样快,一个在此基准测试中更好,另一个更好. (8认同)
  • @Michael:APC只会稍快一点,因为它可以节省标记化,解析和操作码编译.它仍然留给你操作码解释,与JS相比,它仍然非常慢.此外:您声明V8比FF声明更快的声明只是部分正确.当然,谷歌在V8基准测试中击败了Firefox--好吧,毕竟它是他们自己的基准测试 - 但是例如在Mozilla自己的基准测试Kraken上会更慢.所以,是的,谷歌比Mozilla快,但Mozilla也比谷歌快:) (4认同)
  • @ MichealJ.V.当你说Chrome或FF或IE9比另一个更快时要非常小心.[来自crockford的这个基准](http://www.crockford.com/javascript/performance.html)实际上显示IE10的速度是chrome的5倍.没有最快的浏览器了.只有某些事情V8更擅长并且某些事情chakra更擅长并且某些事情JeagerMonkey更擅长. (2认同)

Pav*_*gin 20

看看日期.这篇文章写于2008年.

这意味着,如果你看到PHP5.3的优点,你会发现很多东西,比如闭包和命名空间,以前用过其他语言.其中一些已经影响了着名框架的架构,如Symphony.

那个清单永远不会完整.


与此同时,我遇到很多人认为"弱打字"语言本身就是一个建筑问题.

然后,有些人认为内联正则表达式语法在例如JavaScript中是好事,但其他人认为,"不同的语言"必须在字符串常量中写下来,就像在PHP中一样.等等.


cor*_*ard 15

我会在没有深入了解细节的情况下对此进行一次尝试:

  • PHP的初始设计作为功能集合仍然显示出来.
  • 在最新的PHP 5版本中实现的面向对象模式仍然是半生不熟的,缺乏多重继承(或"mixins"),正确的模块支持,并且旨在向后兼容CoF(函数集合)设计.
  • 方法覆盖和回调本身不支持.
  • 闭包.他们在那里,但他们非常弱.
  • 错误与异常 - 方法与它们使用的方式不一致(再次感谢CoF设计),错误处理是半生不熟的.

我相信我会踩到某人的脚趾,我会得到任何愤怒的暴徒,但我也确信我仍然没有击中一切.这在很大程度上是主观的,但是当你将PHP堆叠在Ruby或Python旁边时,很容易看出什么是不喜欢的.

  • "多重继承"_明显地被忽略,因此_no_设计或建筑问题.支持"方法覆盖"和"回调"."闭包"按照定义工作,不知道"弱"是什么意思.最后但并非最不重要:"错误"来自核心,来自更高级别代码的例外.在某些方面,它感觉很奇怪,但它们并不像你说的那样不一致.但是,你的第一个参数是有效的:) (16认同)
  • @coreyward:在已定义的类上覆盖方法本身就是一个hack.它不像一个好的设计,如果你需要深入到你的课程,让它们工作.我知道,它是一些概念的一部分(比如JSs prototype-oop),但PHP反而更喜欢"干净"的oop方法.但是,您可以使用`__call()`实现类似的行为. (3认同)
  • 为了解决你的一些其他问题:PHP 5.4将支持"traits"(基本上是自动复制/粘贴),类似于mixins.您可以轻松设置错误处理程序,以便为那些不这样做的旧函数抛出异常.是的,PHP是丑陋的,但有一点自律,这不是太糟糕. (2认同)

Mic*_*.V. 14

我不觉得所有"PHP SUCKS"文章都来自习惯于已建立的Microsoft技术的开发人员.

我发现奇怪的是表明PHP是意大利面条代码的陈述.这完全取决于代码的作者,代码是意大利面条还是在处理问题时它会使用某些设计规则.

许多PHP代码的原因是意大利面条代码是因为示例和教程是这样的,他们不会教初学者良好的编码实践.此外,人们可以快速掌握像hello worldMySQL这样的示例,连接到MySQL,进行查询和循环结果 - 但就是这样,这就是所有教程停止的地方.我还没有找到涵盖以下内容的教程:

  • 什么是框架及其帮助
  • 什么是数据结构和数据类型(以普通人可以理解的方式解释)
  • 什么是数组,什么是数组维度,数组如何工作,什么是数组有用
  • 什么是面向对象的代码,为什么面向对象的代码,PHP如何做,什么被认为是好的,为什么有那些模式等等

正如你所看到的,初学者程序员不会费心去学习上面列出的所有这些要点,我知道因为我也是初学者并且做过初学者所犯的所有错误.但是,即使有人不知道如何编程,他们仍然可以创建有用的应用程序.

许多流行的脚本是由谁知道人写什么,他们想要实现的,但是他们不知道如何正确地设计中,他们将部署他们的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语法.因为您可以在需要时更快地扩展它.因为它运行在免费的操作系统上.因为它易于使用.

  • 整个答案可以在Jeff撰写的文章中总结出来.PHP很糟糕(使用Ruby,Python,Scala,Clojure,Haskell,Erlang等等,你会理解),但这并不重要 - 它仍然会被用来产生很好的效果. (4认同)