PHP很烂?我的看法

作者: 阮一峰

日期: 2010年1月 9日

今天,我在玩聚上看到一篇台湾程序员的文章《PHP很烂》

我也想谈谈,我对这个问题的看法。错误肤浅之处,希望大家批评指正。

======================

PHP很烂吗?

作为一种计算机语言,它确实有很多缺点,而且是重大缺点。但是这并不是关键所在,哪一种语言没有缺点呢?我认为,PHP目前最大的问题,不是语言本身,而是它的发展方向出现了偏差。

PHP的开发团队,好像正在致力于将它从"个人工具"升级为"企业工具",导致它的处境很尴尬。说它是个人工具吧,却有很多复杂的高级语言特性;说它是企业工具吧,复杂项目的开发效率和性能,却比不上其他一些语言。结果到头来,不仅"易学易用"的特色丢掉了,而且由于性能问题,依然很难在大型项目中推广。

在我看来,问题出在PHP 4到PHP 5的那一次升级。PHP 4是一种个人工具,很像shell语言的再包装,属于过程式编程,确实易学易用,是个人网站的最合适开发语言。但是,PHP 5就完全不同了,大大增强了面向对象编程(OOP)功能,到了5.3版本,更是添加了名称空间(namespace),甚至连lambda函数都支持了。看上去,PHP的设计者似乎想把这种语言变成下一个Java。

这样做的结果,就是PHP不再是一种容易学习的语言了。初学者必须像学习Java那样,记住那些繁琐的OOP语法,才能用好PHP 5。更糟的是,由于语言变得复杂,带来解释器的性能下降。我记得看过一篇文章,里面说同样配置的硬件,PHP 5.0比PHP 4.3慢30%,那么想必最新版本PHP 5.3就更慢了。要知道作为一种脚本语言,其实PHP 4的速度就已经很慢了。

这就是目前PHP的问题:作为一种个人工具,它的优势正在丧失;作为一种企业工具,它依然不行。

我就不明白了。为什么一定要把PHP变成一种复杂语言呢?支持OOP真的有那么重要吗?脚本语言Bash够简单吧,事实上,很多人因为它太简单了,都不认为它是一种严格意义上的编程语言。但是,就是这样一种简单语言,却是Linux系统的操作基础,每一个Linux程序员都离不开,每天都在大量使用。PHP也一样啊,它的优势就是简单易用,用户只希望在十分钟里写好一个小型的留言板,并不打算用它来建造罗马,你又何必非要让它同Java一样复杂呢?难道非要用户手册超过1000页,才感到心满意足?你看,这么厚的用户手册,不管什么功能,只要你说得出来,我都支持!

另一方面,由于语法越来越复杂,而PHP是一种书写很自由的语言,结果就导致很容易写出混乱得可怕的代码。正如XML格式创造者之一的Tim Bray所说:

"我很肯定,你能够用PHP写出干净、易读、可维护的代码。但是显然,你稍一放松就做不到这一点了。"

我觉得,现在可能是PHP代码分叉(fork)的时候了。未来的PHP最好有两个版本:一个版本面向企业级应用,支持高级的OOP功能,着眼代码的可维护性和可协作性;另一个版本面向个人应用,强调易学易用,着眼快速和高效的网站开发。

(完)

珠峰培训

stuQ

留言(40条)

>>“我很肯定,你能够用PHP写出干净、易读、可维护的代码。但是显然,你稍一放松就做不到这一点了。”

这种说法,我真的非常同意
个人认为,特别在队团开发时,如果没约定好,就会出现后期代码不堪入目的情况
但现在企业级的PHP的确是其最大的弱点,而开发者在尝试完善这方面的功能时,把PHP弄得越来越庞大,事实上非企级级开发真的不虽要这么复杂的东西。再说,企业级的现在都不会优化考虑PHP的……
但是PHP插件式架构很不错,我个人比较喜欢,但容易和低层结合写出强大功能的扩展接口

上面只是小弟的愚见

很多时候语言是其次的, 毕竟使用的是人。。。

我用php已经4年了,但是没有经历过php3,php4时代。

虽然php5支持了很多oop功能,但是全面的看php他依然是一个简单易用的程序语言!

就好比Js,也可以模拟出oop,但是不可否认js很简单,很好用。但开发大程序的时候就不行了!Jquery写的很辛苦!用起来也不见得多么快!

我对php的理解是他从他解析http协议来看的,从php4->php5这个都没变,php6也没变。还是解释性的脚本语言!和java,.net有本质区别。

php4也可以使用面向对象,而且很多人去尝试使用。发现很多不方便的地方。于是php5发布了! 至于牺牲的30%的效率,已经无所谓了。 4年前的服务器效率只是现在的50%,价格还要贵上很多!

而使用php5的开发效率大大提高,人力成本节省了!

至于两个版本的问题,也没有必要吧,你依然可以不使用php5的oop特性来完成开发!

我是从Java转Php的,现在两者都有在做。

在今年早些时候接触的php已经是5.x版本的了,当时发现别人(专门写php的程序员)的php代码简直一团糟,像spaghetti!

在后来自己写代码的过程中,有意识的用Java的那套写程序的方法来写代码,代码倒也挺清楚,一个个方法清清楚楚。

虽然php5把面向对象加进来了,但是很多一开始就写php的程序员(从php3.x, 4.x过来的)还是习惯于传统的过程式编程。这也是我现在维护的代码相对于Java来说“一团糟”的原因。其实现在很多php框架也只是把原来在一个php文件中的代码分开来,然后加上php5的面向对象特性,就成了“MVC”。当然,这些框架都是要求php版本要达到5.x的。

很多php世界新的东西,在我看来很多都已经在Java中见过了,比如说上面的MVC,这也是php向企业开发进军后必然产生的,若不是MVC,也必然会有其他的东西产生,但是目前有Java这样一个标榜在,所以很多概念都可以拿来在php中实现,所以,阮兄所说的下一个Java我也深有同感。但php是动态类型的语言,而Java是静态类型的,本质上不同。这也是为什么即使是5.x的面向对象的php始终给人一种奇怪的感觉的原因。搜索“PHP5 OOP”就有一大批批评和吹擂的文章。

光就php语言来说,烂不烂是见仁见智的。像阮兄所说的php5的现在的尴尬的处境的确是叫两边(个人和企业开发人员)都有理由说它很烂。因为它已经偏离了php一开始产生的理由。

Php官网的介绍中写的很清楚: The main goal of the language is to allow web developers to write dynamically generated web pages quickly, but you can do much more with PHP.把事情搞复杂一直是某一类人的专长,php似乎也开始走这条路了,因为不复杂就称不上“企业级”,而Spring的作者在当年倡导lighter and faster Java的时候,确实在做相反的事。

(完)

很多人写Php的风格的确非常让人无奈,但不是所有人

php是比较适合写一些快速上线的小项目的。

但大型项目就需要的是清晰的层次,接口。这些都是目前很多php界开发者的弱项

其实java也是靠各种不断涌出的概念来实现这些的,并不是语言级别的功劳。
面向服务编程 什么的在大多数语言里都可以做

没有用过PHP,也没有做过WEB方面的开发。不过就个人而言,我还是比较赞同阮老大的看法,一个语言如果触须太长,很容易导致原有整体质量下滑。

举一个很拙劣的例子,C++可以说是C的一个比较成功的“升级”,但是同时很多人认为C++很恶心,不够纯净。而C++在系统开发上绝对不可能和C比拟。

个人一直没有把PHP当作企业级开发语言……

同意上面LD的说法,语言是其次的,再好的语言,也可以被写出烂代码。

烂的不是语言,是程序员。
OOP和design pattern很多时候是毒药,不是解药。

除了刚开始的 PHP 5.0 版本,其后的 PHP 5.1、5.2、5.3版本无论是性能还是功能都远超 PHP 4.x 系列。

现在软件的复杂性已经比过去增大了 N 倍,所以为了不让开发维护成本随之成指数性的增长,我们必须要有新的工具来解决这些问题,OO 就是人们发明的这些工具(或者说方法)之一。虽不能尽善尽美,但总体说来,效果还不错。

阮一峰,我看到一个关于SixthSense的视频,太激动了!我想听听你的看法,可以么?链接是http://v.youku.com/v_show/id_XMTQxNzY2MDUy.html,我想你应该也会喜欢的吧~

js十分重视名称空间的

js不限制使用什么风格编程,当然更多时候还是会使用更接近js设计的风格

对约定已经形成习惯后,就不会在意什么语言

通过学习OOP类语言真的不能更好的掌握设计

第一眼看成PhD了。

anyway, open source is the trend

什么是企业级开发呢?这个很难说明白。
不过即使是php5也还是很难胜任erp,crm之类应用的开发,而是更适合开发网站,不仅仅是小网站,对于巨大用户量巨大访问量的网站来说也很适合。这方面完全不输于java,.net。

P.S. 对于5.3加的那些东西,namespace实现得我也觉得挺恶心。其他的新功能倒是很实用。

最近因为要重建网站,接触了一下PHP,觉得博主的分析很有道理。说真的,很多年不写代码了,不经意接触了一下,发现这么热门的技术原来是在用这么原始的方式来拼凑界面,觉得很吃惊(看官不要笑我哈,IT领域太大了,很多东西你没有时间去了解)

运行效率不高?论据?PHP应该比Python快吧。比Lua差,比Java更差点,可是Lua没有成熟的开发框架,Java太重了。看看Rasmus的理念,其实PHP成这样挺好理解的:http://en.wikiquote.org/wiki/Rasmus_Lerdorf

才准备好好学习PHP 然后转RUBY 然后重新学习C语~

每个人的需要都不一样 没有办法。

没有用过PHP,也没有做过WEB方面的开发。不过就个人而言,我还是比较赞同阮老大的看法,一个语言如果触须太长,很容易导致原有整体质量下滑。

php

我是.NET出生,语言各有各的优势

我做java,net,php,c...
语言的演化和生物一样,越来越特异...
最后消失.

最简单的生物,细菌...最广泛.
可是很多人不明白.

我是做php,我依然喜欢php。我不太同意说“php糟糕”这种说法,虽然他有缺点。
“什么人做得出什么事”,很多评论都把他归结到php上,这不好吧,按照有些评论的说法,是不是可以说像python、ruby之类的“更糟糕”,更不是和作为一门脚本语言了....

我对阮哥的生活很好奇,我想阮哥平时都在做些什么呢?难道天天都在工作或者看书?阮哥看书学习的时候不会感到痛苦么?而是很快乐吗?我想知道阮哥对什么东西最有兴趣。。。。。真是充满好奇,但又幼稚的问题啊。。。。。

看书学习为啥会痛苦?可怜的孩子,被应试教育毒害了吧...

没有用过PHP的人就不要在这里发布什么好像道理的意见,一样东西写得好不好,并不是语言,而是技术人员本身,PHP天生就是为网站开发而用的,很多特殊应用都与网站开发有关....

看一下全中国的牛网站,像腾讯、CCTV、百度、新浪、搜狐....等等,都是用PHP开发的,像这种大网站,难道称不上企业级吗?像全国最流行的社区程序UCHOME、论坛DISCUZ不也是用PHP开发的吗?

什么企不企业级这种无聊的划分,只有那种没有真正技术的人员在这里自以为用了什么很牛的语言编写,就是什么企业级,真的是百般无聊,像C语言这么低级的语言,不还是应该在很多高层的应用上..

PHP为什么会这样?
很简单,因为按照原来的设计理念,它开发大型甚至中型的应用对于团队或者公司来说,开发效率和复杂度相对Java,.NET,甚至Python基本没有优势可言了。

PHP变成这样,那是因为一大批使用PHP的程序员现在不得不开发这样大型或者中型的应用,为了迎合这个趋势,面向对象也就成了PHP当初的选择,因为它找不到更好的技术或者说方法论来支撑它在企业级的开发。

个人不看好PHP,在我看来,这种语言开发的项目除非你是大牛级人物,或者严格的项目管理体系和规范,否则下面程序员写出来的代码就不要说可维护性了,没有一个好的IDE,弱语言的代码可读性都成问题,还谈什么企业级开发。

谁叫它有那么一大批开发人员喃,不是PHP需要企业级开发,而是PHP开发人员需要企业级。

引用eefadmin的发言:

最近因为要重建网站,接触了一下PHP,觉得博主的分析很有道理。说真的,很多年不写代码了,不经意接触了一下,发现这么热门的技术原来是在用这么原始的方式来拼凑界面,觉得很吃惊(看官不要笑我哈,IT领域太大了,很多东西你没有时间去了解)

php本来就是一个很好的模板引擎,拼凑界面也是模板最原始的用法,当然你可以再引入更高一层的模板啊,比如smarty之类。php开发网站真的很合适,因为它可大可小,可简单可复杂,在开发的快速性和后期的维护性上取得一个最好的平衡点才是最重要的。

PHP直接源自于C,在WEB开发领域,还是一枝独秀的。很多东西,一旦上了“规模”,必然乱象重生。比如类UNIX系统,一直是由于抑制某些人的好大喜功,才保持了一定的先进性,其他的科学或工程领域,也是一样的。从PHP5开始用,没有觉得怎么烂。许多人强调“规范性、企业级”的编程和应用,觉得这种说法,对于直接与数学、电子科技接轨的计算机编程技术来说,也是不清不楚的。科学的尊严,与人数无关。

PHP朝着企业应用方向发展也是为了公司的发展,不然哪来那么多钱养活一群人。

PHP 5.0比PHP 4.3慢30%,那么想必最新版本PHP 5.3就更慢了。

這句話你想當然了,PHP5.1的性能幾乎比PHP5.0高一倍,5.2和5.3也依然在做性能優化,最關鍵的一點是PHP 5.1之後執行對象方法效率幾乎和執行一個函數完全相同,這一點是一個很重要的提高。

另外,即使PHP5一直是增強OO,但是你想寫PHP4的純過程代碼依然沒有問題

至於企業級的應用問題。。。這就是爲什麽Zend要出Zend Framework的原因,當然...ZF未必就做到最好了

不会PHP,平时用的是.NET。
不过,我觉得既然想搜狐、网易这样的公司都在用PHP,PHP就应该是很快很强大的,虽然有因为免费的成分在里面。
.NET是我熟悉的,.NET可以很快速的构建网站,可以实现很复杂的功能。但是如果追求效率的话,很多ASP.NET的控件还是要自己写,ASP.NET里面提供的太庞大臃肿了。
写ASP.NET控件的人,应该没有写PHP框架的人多吧,所以我觉得PHP的那些框架的现成的东西,用起来应该比.NET里面提供的好用。

我是个面向对象的程序员,正在维护不大懂的php,看起来真是一团糟.用5.3环境,代码全错.5.2版本,N个warning. 看面向过程的程序,几百行,头疼.没注释.吗的个靶子.

过程式不一定就没有oo的好。过程式照样可以写出高可维护性的代码。oo不是银弹,有时候是垃圾。

还是很多年前的那句老话说的好
用垃圾技术不丢人,把牛X技术用垃圾才丢人

时间证明PHP并不差,而且发展的很好~~
个人觉得门槛高一点是好事,这样就避免了很多质量不高的代码出现的几率。

PHP就是一种垃圾东西,根本就没有得到承认,就是一种小脚本,一个小团队,舔.NET或JAVA屁股都不如的垃圾东西,直接打死算了,百度、淘宝这些垃圾企业还在用PHP,简直是笑话,去死吧,垃圾脚本。

php效率低,但是有zend给他做引擎啊。如果感觉纯文本的php运行效率低下,(其实我个人感觉也低不到哪里去),可以使用Zend Accelerator加速器。php还可以实现编译成某种文件,也可以加速的。需要注意的是,php编译后,某些东西会发生变化,参考我的文章http://blog.csdn.net/squallleonheart/article/details/5900814
从php4到php5,虽然手册变得有点难读了,(主要是没人翻译php5的英文手册,phpchina有人翻译了吧)但是php在网页范围内能做的事情确是越来越多..
php可以操作服务器COM组件,可以处理pdf,可以处理flash,可以处理图像.除了不能直接获得客户端mac(偏方除外)..php模板的出现给程序员减轻了很大的负担(心理的和体力的)..
总之,php还是很不错的..

无意间来到这里,5年后再来评论未免有事后诸葛之嫌,但我还是想随便谈谈

迈上5.0后PHP确实开始像Java了,但我一直觉得PHP的强大之处就在于他学习,但不照搬,他学Perl但保留了自己的可读性,学Java但保留了自己的动态和快速开发能力。PHP还及时向ruby和nodejs学到了集中式依赖管理composer。这种学习能力或许让PHP变得奇怪,但也正是PHP强大的源头。

博主可能在PHP这方面稍有些臆断,其实php5.0慢,但后面的版本是一个版本比一个版本快的,即使不谈再上一个档次的PHPNG,当年的5.3也已经不慢了

PHP的发展方向其实一直是最好的web开发脚本语言,目前看来它没有走偏

好消息是php7粗来了!

多年后来到这里,很高兴看到PHP没有走偏

引用jorkboy的发言:

多年后来到这里,很高兴看到PHP没有走偏

2017年08月21日,打一个赞同者的时间戳: 1503320312

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接