`
找不着北
  • 浏览: 310602 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为什么说PHP是个集中营

阅读更多

有一天我跟在DUMBO 的一个非常棒的创业公司 的老板聊天,谈到为什么非PHP界的开发人员普遍轻视PHP和PHP相关社区。他提出了一个观点让我印象很深,很大程度上是因为以前从来没有听到过这样的说法。

如果你不知道大多数的程序员都会对PHP发什么样的牢骚,那么,这些牢骚差不多会像这样:

  1. 语法丑陋
  2. 缺乏其它语言都有的一些必要的特征(在5.3版本之前,没有命名空间,闭包)
  3. 不一致的函数命名、使用惯例,以及其它一些怪异的东西
  4. 过程和面向对象的杂混
  5. 基本上80-90%的PHP项目都烂如一堆狗屎

但他所说的PHP的问题却是另外一个问题。他并没有说这种语言有问题——他认为这种语言被一种常见的文化现象包围着,是一种通常由语言的创造者造就的文化传统,现在看来这对一些糟糕的编程实践方法起到了鼓励作用。也就是它使PHP代码变的劣质和不可维护。

这种一个语言或框架上体现出创始人的哲学思想并被相关社区推崇的现象是的确存在的。他拿出来Ruby和其创始人Matz 作为例子。Matz想要的是一种易读易写、能提高程序员工作效率的语言。没看见Ruby开发人员们言之必称快速开发以及这种语言的优雅?

接着就是DHH   和他的Rails框架。还有Guido 和他的Python语言。于是我在想:Rasmus 对于PHP呢?

Rasmus Lerdorf给人的印象非常的有趣。他创建了最初版的PHP语言,而且一直在改进这种语言,他在PHP社区里被当作神一样崇拜,他在PHP的任何方面都享有最大的权威。他被众多的会议邀请 去做演讲,同时被大网络公司所雇用 ,他获得了所有人的尊敬——尽管有这样一种事实:他成了大多数的非PHP程序员所鄙视的PHP上的众多问题的形象代表。

Rasmus倡导避免使用框架,而把PHP更多的当作一种模板语言。对他来说,这种做法能产生直接的运行效率和可扩展性(程序负载可知)。而对于其他的所有人来说,这种做法导致了大量的乱炖似的过程式代码,大量的无法维护的项目。自从1995年PHP诞生至今大概10年左右的时间里,所有的PHP项目都是按照这种指导写成的。

与此同时另外一个问题突然的出现了:在PHP5.0之前,PHP的初期,PHP获得了大量的新手的追随。这种语言的入门门槛出奇的低,任何人都可以下载自解压的×AMP Windows程序安装包、在2两分钟内用上这种语言。除此之外,那时在web开发方式上对MVC模式的共识并没有真正的出现。这样一来你可以想象,一群新手和一个缺乏好的开发实践方法的语言组合到一起能创造出什么?一堆无法维护的垃圾。而且整个大环境都是这样。

不要误解我的话——优秀的PHP开发者还是不少的,即使是当时。但是,就像我说的,粗制滥造的菜鸟作品到处都是。当牛仔式无羁的PHP程序员在没有指导原则的情况下聚集到一起开发程序,于是像PHPbb、 PHPNuke以及很多的粗糙的.php3程序包就出现了。但是你能单纯的责怪PHP开发人员吗?不能!其它的web语言巨人,ASP和Perl,同样恶名远扬,同样宣传着一种乱炖式的开发方式。

所以这就是为什么PHP会得到这样的骂名。是因为它的历史流传。大多数已经转向Python,Ruby和Java的当年的PHP开发人员并没有在web上MVC概念兴起时回头去重新思考这种语言。此外,更有一些像”Ruby公子“Zed Shaw抱怨一些程序员的思想”受PHP毒害“这样的露骨的讽刺,像这样的言论在RubyInside上很盛行

PHP是个集中营

但像Zend和CodeIgniter这样的框架的出现把这种语言推向了正确的开发方向上。事实上,它把PHP推向了与Rasmus所希望看到的相反的方向上了。查看一下Zend和CodeIgniter框架,你会发现它们是为数不多的文档写的很好,代码写的很好的程序。

大多数学习了Ruby开发人员同时都要学习Rails和MVC知识;PHP在此之前已经被使用了整整10年。对于那些新手来说可恶的Ruby没有给他们这段时间让他们自由发挥。Rails有现成的标准指导,它的入门门槛相对高很多,通常会把一些缺少经验的开发人员挡在门外。

事实上,PHP应用程序是可以向其它种语言那样写的很好,而且还会具有一定的运行速度上的优势。PHP世界里的MVC风格的开发方法兴起只是在近几年才出现的现象。不得不承认,我们应该感谢Rails带来的这种变化。

那么,PHP如今是个什么样呢?

  1. 各种标准(非统一,但大多数项目使用MVC,很少有垃圾般的过程式程序)
  2. 很低的入门门槛
  3. 速度和可扩展性(在各种脚本语言里PHP应该是最好的)
  4. 有一个好的单元测试框架
  5. 有最好的各国语言翻译的文档

除此之外,互联网上大多数有影响的网站都使用PHP作为它们后台的语言或工具,诸如Facebook,Digg,维基百科,Wordpress,Drupal等等。我相信,对PHP有一个深入的掌握会使一个程序员打开更多的未知领域的大门。

如果你不赞同上面所说的,请留下评论,或email给我——我想听听你为什么不这么认为。

事实上,我并不是一个PHP迷,我对语言没有感觉。我使用PHP大多是因为——你猜到了——有人愿意付钱给我。所以一切归咎于此:

如果你希望在软件设计上做出明智的决定,PHP是你开发web应用程序的最佳选择。

顺便说一下,如果你确信要使用PHP来开发下一个web应用,请试一试CodeIgniter 。它是一个轻量级的,普通的,超级快的PHP框架。对于CodeIgniter,我是个粉丝。

 

:)

19
14
分享到:
评论
7 楼 bardo 2011-06-06  
不能完全同意博主的观点。主要在于对框架的认同。PHP没有好的框架。Zend,我在本网站已作了批判。至于CodeIgniter,充其量只是一个玩具。它能做的仅不过是一个小的企业网站,并且,安全,可扩展性等存在相当大的问题,包括,在其基础上重写的KOHANA也一样。
PHP目前最大的悲哀就是没有好的框架。有一些有标准的东西。比如:log4php,那是抄的JAVA的。CAKE,那是抄的ROR的。可悲的是抄的人,根不并不精通PHP。所以,也是垃圾。
6 楼 xieye 2011-05-17  
用zend好多年,zend的特点就是,如果你对其中一个包不满意,不用就是了。可以只挑选自己爱用的。
5 楼 smartfish9 2011-05-15  
Tyler_Long 写道
php用过symfony这个框架. 可以说这个框架知名度并不比codigniter和zend小. 但是整个过程中我饱受痛苦煎熬. 感觉很混乱,写出来的代码过几天就看不明白了. 两个月我就折腾了一个小项目, 比一个简单的博客程序复杂不了多少.

感觉一个语言的劣势,光靠框架是难以弥补的. 所以现在非常坚定地追随python和c#. 二者都非常牛叉优雅,并且几乎可以用在不同的场合. IronPython和C#可以互相调用! 当我知道这一点的时候, 兴奋之情难以言表. 你说,c#和python合璧, 有啥项目做不出来? 还有啥项目是难做的?

所以说啊, php框架的粉丝们,苦海无涯,回头是岸... 有比php更好的东西,并且多着呢.

symfony框架很不怎么样。现在的框架我感觉还是yii不错,codeigniter没用过,但与yii相比,速度挺慢的,zendframework速度更慢,且过度设计了,严重不推荐。我熟悉python,以及django,感觉做网站还是php好,当然首先要选一个好框架,并花点时间学会它。
4 楼 cherrycmd 2011-05-15  
php的项目很难维护
3 楼 Tyler_Long 2011-05-14  
php用过symfony这个框架. 可以说这个框架知名度并不比codigniter和zend小. 但是整个过程中我饱受痛苦煎熬. 感觉很混乱,写出来的代码过几天就看不明白了. 两个月我就折腾了一个小项目, 比一个简单的博客程序复杂不了多少.

感觉一个语言的劣势,光靠框架是难以弥补的. 所以现在非常坚定地追随python和c#. 二者都非常牛叉优雅,并且几乎可以用在不同的场合. IronPython和C#可以互相调用! 当我知道这一点的时候, 兴奋之情难以言表. 你说,c#和python合璧, 有啥项目做不出来? 还有啥项目是难做的?

所以说啊, php框架的粉丝们,苦海无涯,回头是岸... 有比php更好的东西,并且多着呢.
2 楼 lvhjean 2011-05-13  
不错。
我也喜欢CodeIgniter,目前正在学习。

1 楼 zjshan 2011-05-13  

相关推荐

    PHP连接串口程序php_ser

    php实现RS232串口通信 下载php_ser_5.2.0.zip 解冻把php_ser放到ext目录下, php.ini里加上: extension=php_ser.dll PHP code string ser_version( void ) void ser_open( string port, int baudrate, int databits, ...

    PHP+MySQL动态网站开发

    《PHP+MySQL动态网站开发》详细介绍了PHP的脚本语言基础、运行环境和PHP面向对象编程(包括MySQL数据库)的知识。全书共19章,内容分为理论部分和实战部分。理论部分包括PHP技术概述和基本语法、字符串和正则表达式、...

    VS.Php 2.10 Version 2.10.6836 for vs2008 破解补丁

    VS.Php 2.5不仅增加了对Windows Vista系统及Visual Studio Service Pack 1 for Visual Studio 2005的支持,还有许多新特性集中在为开发者提供轻松远程管理现有的PHP应用的能力。 原版下载:VS.Php 2.10 for Visual ...

    phpweb二次开发,phpweb破解版,phpweb后台升级,phpweb2.0.5升级

    phpweb二次开发,phpweb破解版,phpweb后台升级,phpweb2.0.5升级,phpweb...我们测试了下,确实是到最phpweb最新版v2.0.5/20120412,网站并无破坏什么。 强烈建议,覆盖之前,一定要先备份好您的网站程序以及数据库。

    教务系统查询源码php

    php源码 教务系统查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ; charset=utf-8" /> 客户查询 </head>

    PHP 基础实例教程(PHP网页实例版)

    PHP 基础实例 在HTML中嵌入PHP 使用 PHP 标记 PHP 语句 使用 PHP 注释 PHP 语句间的空格问题 添加动态内容 使用 PHP 函数 PHP nl2br()格式化输出 PHP 打印格式化输出 PHP 字符串的整理 PHP 改变字符串中字母的大小写...

    php_imagick.dll For PHP 5.4.11

    php_imagick.dll是一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。 以前一直用php的exec函数调用ImageMagick的命令,然而开放php的exec函数(有很大安全隐患),有了...

    PHP网络编程从入门到精通 强锋科技 陈营辉编著 等编 ISO

    本光盘主要为书中的源程序,关于如何使用这些源程序,一是看书中的说明,二是看本盘附带的视频演示。 -----------------------------光盘程序代码说明-------------------------------- 源文件\01~21 第1~21章涉及...

    站内全文搜索php源代码

    3)速度:在时创网络和有个网络的风驰电掣型上,20M内容的搜索,反应速度约为1-2秒,国外很多的php免费空间上速度也差不多,但在新网经济型上奇慢。 下载: http://www.uj8eg1.chinaw3.com/phpsearch.zip 演示:...

    php实现文件共享(其于windows网上邻居原理)

    4: 要添加新的脚本时,请在所属分类目录中再建一个目录,文件名可为中英文,取名最好简捷明了能直接说明用途。在这个文件夹内放入要用的脚本,并且建一个readme.txt文件,在此txt文件中说明脚本的具体功能和用法。...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 - 面向对象编程 PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 - 可...

    PHP+MySQL实现的图书管理系统(源代码+使用说明)

    项目使用说明: bms文件夹里面全部都是MySQL...而另一个图书管理系统文件夹里面则是PHP文件,将整个文件夹复制粘贴到xampp安 装路径下的htdocs文件夹里即可使用。我的路径即是D:\xampp\htdocs\图书管理系统\***.php

    php的xmlrpc详细讲解与实例

    PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是PHP 4还是PHP 5,都已经默认集成了XML-RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML-RPC的协议交互,...

    PHPnew(PHP模板处理引擎) 7.0.rar

    PHPnew是一款PHP类简易式模板处理引擎,整体实现原理源于discuz程序的思想,90%的模板语法均来自discuz的程序仿制,这也将为引擎的简易性做了最足的基础准备。引擎无需配置即可使用,兼容性强,扩展方便,功能更是非常人性...

    ffmpeg-php-win32-all.zip

    ffmpeg-php 是一个php扩展,用来获取视频或音频信息,你可以用它从视频中截取图片、获取视频时长,视频的长、宽等。 下面介绍在windows环境下本扩展的安装,在安装本扩展之前你首先要确认你本地环境中已经安装好了...

    PHP 5.3 OPCODE工具(用于zend 加密php 5.3分析,逆向)

    php opcode的反解,用于分析PHP ,逆向PHP 加密,由OPCODE转换PHP代码. WINDOWS 版本的使用: 开始,运行,CMD 进入PHP所在目录,执行: Php.exe –c php.ini 111.php ...用这个工具,可以用来分析:Zend 加密的 PHP5.3程序.

    PHP 即时通讯项目

    JJ 近期的完善 会使 JJ 更容易地 为你的网站所有,让你的网站 也可以有像 淘宝旺旺 那样的 专用聊天工具 [ PHP 图像界面 ] JJ 采用 Gtk图像界面库,Gtk库 中 提供了丰富的 图形界面窗体(Widget),以及灵活方便的 ...

    PHP开发,使用Myeclipse开发PHP的好用插件,附安装说明

    些版本为 phpeclipse_1.1.8; PHPeclipse这个插件包括的功能有:PHP语法分析,调试,代码格式化,大纲视图,代码模板定制等。如果平时要同时做一些java和php的Web应用,就需要使用Eclipse,可以安装PHPeclipse和MyEclipse...

    PHP开发框架底层【试用于任何系统的PHP+mysql+smarty+oop开发】

    该结构包含了 smarty mysql page 类,属于一个系统开发底层。 包含了后台管理,可实现无限级别控制,已经包含登录退出管理页面 数据库可以实现新闻无限分类扩展,系统配置无限增加字段扩展 试用于任何系统的...

Global site tag (gtag.js) - Google Analytics