我正在阅读杰夫阿特伍德的文章"PHP Sucks, But It Doesn't Matter"。
他在评论中写道:
那就是说,我绝对认为让PHP开发人员了解PHP的体系结构限制,并了解替代方案是非常重要的。
这些限制是什么?它们与其他脚本/弱类型语言相比如何?
此外,在需要避免限制的情况下,有哪些替代方案?
答案 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堆叠在Ruby或Python旁边时,很容易看出什么是不喜欢的。
答案 3 :(得分:14)
我不再觉得奇怪的是所有“PHP SUCKS”文章都来自习惯于建立微软技术的开发人员。
我发现奇怪的是表明PHP是意大利面条代码的陈述。代码的作者完全取决于作者,无论代码是意大利面还是在处理问题时它都会使用某些设计规则。
很多PHP代码的原因是意大利面条代码是因为示例和教程是这样的,他们不会教初学者良好的编码实践。此外,人们可以快速掌握hello world
或连接MySQL等示例,进行查询并循环结果 - 但就是这样,所有教程停止的地方。我还没有找到涵盖以下内容的教程:
正如你所看到的,一个初学者程序员不会费心去学习上面列出的所有这些要点,我知道因为我也是初学者并且做过初学者所犯的所有错误。但是,即使有人不知道如何编程,他们仍然可以创建有用的应用程序。
许多流行的剧本都是由那些知道 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)
为PHP编写扩展是一个PITA。没有Perl或Java那么糟糕,但并不像它可能那么容易。易于扩展的冠军仍然是TCL,它来自90年代初期。几乎所有采用char *的C函数都可以成为TCL扩展。
在其他系统中嵌入PHP。 mod_php,gtk.php.net显示可以完成,但Guile和TCL更容易嵌入。