PHP的架构限制是什么?

时间:2011-04-28 18:30:17

标签: php architecture

我正在阅读杰夫阿特伍德的文章"PHP Sucks, But It Doesn't Matter"

他在评论中写道:

  

那就是说,我绝对认为让PHP开发人员了解PHP的体系结构限制,并了解替代方案是非常重要的。

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

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

8 个答案:

答案 0 :(得分:29)

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

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

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

但除此之外,我认为PHP非常多用途。你几乎可以使用它 - 我做的;)

答案 1 :(得分:21)

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

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

该列表永远不会完整。


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

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

答案 2 :(得分:15)

我会毫不犹豫地抓住这个细节:

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

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

答案 3 :(得分:14)

我不再觉得奇怪的是所有“PHP SUCKS”文章都来自习惯于建立微软技术的开发人员。

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

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

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

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

许多流行的剧本都是由那些知道 WHAT 的人编写的,但他们并不知道 HOW 来正确设计他们所处的环境(框架)我将部署他们的PHP代码。 这就是为什么我们看到脚本变得非常受欢迎,因为它们作为普通用户很容易使用,很难扩展为开发人员,使用奇怪的函数名称,奇怪的编码约定和没有注释。

另外,有点荒谬的是说PHP很慢,这绝对是胡说八道。当我遇到这样的陈述时,我想要自己开头阅读这样的博客文章。

在做出这样的声明之前,必须先了解几件事:

  • PHP是一种脚本语言,这意味着每当有人请求一个获得 A LOT CPU功率的PHP页面时,就会调用解释器。这已经通过使用诸如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语法。因为您可以在需要时更快地扩展它。因为它运行在免费的操作系统上。因为它易于使用。

答案 4 :(得分:3)

PHP每天都在改进。它是开源的,并在世界各地使用。也就是说,当您遇到问题时,您最有可能找到解决方案或获得比其他任何语言更快的帮助。

这篇文章的原因,我认为很简单。如果您(或者其他任何程序员)习惯于使用C ++,Java等编写代码,那么他们就有很多可能性,比如OOP编码和PHP在一开始就受到限制。

PHP有许多内置函数/方法/类是一件好事,因此您不必花费数小时来编写PHP已有的函数/类/方法。

您不必(也不应该)尝试记住所有这些功能。记住所有这些(其中一个正在做什么,如何使用它等)是没用的。想象一下,你正在做一些项目,花了你4-5个月才完成(是的大一点(:)你不会在所有项目中使用所有这些功能,最终你会忘记他们在做什么,因为你没有经常使用它们。

关键是,你应该知道PHP的语法。当您需要执行某些操作时,请先检查PHP是否已在其库中具有您要执行的操作。查看手册以了解如何使用它。通过这种方式,您还可以学习(NOT MEMORIEZE)经常使用的那些,这些信息将很难忘记。

PHP或任何其他编程语言就像我们人类每天用来相互通信的普通语言。如果你不使用它,你会忘记。

PHP 5.3及以上版本带来了许多功能。静态功能是我最大的特色之一。它使我的生活变得如此简单,以至于我甚至无法开始描述。

由于PHP是着名的开源Web脚本语言,Facebook开发团队创建了HipHop

HipHop的作用是从PHP获取数据并将其发送到C ++。 C ++完成所有过程并将结果发送回PHP以进行输出。

HipHop的整个想法是让Facebook使用更少的服务器和改善页面显示时间。

现在你告诉我这对你来说是否有限和/或缓慢?

答案 5 :(得分:2)

我不认为有任何像'架构限制'的PHP。开发人员知识限制可能是原因。阅读此http://www.quora.com/What-is-Facebooks-architecture。大多数时候,非世界级的开发人员不知道如何使用php来完成其全部功能。

答案 6 :(得分:0)

我认为他指的是与纯粹面向对象的语言相比,PHP的OOP部分并不是最好的。

答案 7 :(得分:0)

nikic's answer

之外的架构限制

为PHP编写扩展是一个PITA。没有Perl或Java那么糟糕,但并不像它可能那么容易。易于扩展的冠军仍然是TCL,它来自90年代初期。几乎所有采用char *的C函数都可以成为TCL扩展。

在其他系统中嵌入PHP。 mod_php,gtk.php.net显示可以完成,但Guile和TCL更容易嵌入。