本文发出后,确实引起不少的争议。看来PHP的支持者不少啊。但是,从一个侧面来审视PHP,也未尝不可。
从php3到php4
到PHP5,再到PHP6,PHP确实越来越完善,功能也更强大。PHP为一开放源码项目,其中包括可以简化程序的描述性语言引擎以及一个大的链接库,也
有专门开发PHP的公司,如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。尤其是跨平台的使用特性将使它在linux平台大放异彩。可以
直接使用java的类库,可以直接调用perl/c等语言写的程序增强了它的可扩展性。越来越成熟的MVC开发框架使它能适应企业级的大型应用开发。再加
上它天生强大的数据库支持能力。确实博得了很多用户的喝彩!
不过,这里倒是想从侧面来看看PHP也许不称职的几个理由。
1.应用范围仍然有限
与
Java相较,PHP可用范畴限制较多,它仅能用在网络服务器上,不像Java,同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。记得有个老
友陈述放弃php的原因:“第一:每个变量前面要写一个$符号; 第二:因为不是编译执行的方式;
第三:面向对象的功能不强。”比如,php的oop运行一次就退出,下次还要继续重建o,继续继承....。注意是每一次请求,它不能利用上一次的结果,
下一次用还要从头初始化。许多问题的根源还在于apache。
再一个:“可能目前php
IDE不是很好,给别人入门难的感觉。”尽管新版本增加了面向对象功能,但相比成熟的Java,仍然有许多待改进之处。以至于有人这么归纳:
(1)缺乏广泛的使用,以至于微软也要和大家讨论PHP到ASP.Net的迁移。(2)缺乏大公司的支持,象IBM的开发中心开源项目首页上的6个标题
中,PHP只有3个。
(3)缺乏重量级的应用,象Google和Yahoo用PHP(不是所有的产品)都是瞎玩。当然,我知道Taobao.com也是PHP做的。
2.调试还是不太方便
在apache上的进程工作模式。 apache处理每一个php请求,都要创建一个子进程,这样的话实现连接池比较困难了,进程间的数据共享一般只能通过文件,数据库什么的完成,各项开销比较大,当然速度并不低。
还
是陈述一个网友的发言:“没有好的开发工具,调试起来过于复杂。虽然zend不错,但是哪里是VS的对手。没有强大的Visual
开发工具,换句话,如果有了,我绝对选择PHP。”这好像是和Java早期比较类似的一个情形。也许,在不远的未来,我们会看到很好的调试工具。问题是:
现在还没有太称心的,尤其是大型系统上。
还有个问题,就是共享内存的使用,我就不知道为什么直接使用php操作共享内存就这么复杂,而且速度居然比直接操作磁盘文件还慢。
3.主流版本的安全漏洞百出
看一个最近的新闻,和Php pdflib扩展绕过open_basedir安全限制漏洞有关。受影响系统:PHP PHP 5.3.0。
PHP
所使用的PDFLib扩展没有正确的强制基础PHP配置指令,这允许攻击者绕过open_basedir限制在非授权位置写入文件。仅在多个用户可以创建
和执行任意PHP脚本代码的共享托管配置中才会出现这个漏洞。在这种情况下,open_basedir限制应彼此隔离用户。
PHP V6 在添加一些新特性的同时,也删除了以前版本中的一些函数和特性。被删除的大部分东西,比如 register_globals
和 safe_mode
,
在当前的 PHP 中都被广泛认为是 “有漏洞的”,因为它们可能招致安全风险。当然,PHP的配置非常灵活,可以通过php.ini,
httpd.conf, .htaccess文件(该目录必须设置了AllowOverride
All或Options)进行设置,还可以在脚本程序里使用ini_set()及其他的特定的函数进行设置。通过phpinfo()和
get_cfg_var()函数可以得到配置选项的各个值。
4.大型系统的稳定性与一种语言的风格
有
人这么说(也是一个PHP读者的疑问):“大型系统还是用.net或者jsp吧,不是因为php不可靠,是因为开发php的人良莠不齐,而php的开发模
式又不固定,以你问这问题的情况来看,如果是多人开发,你肯定控制不好。.net或者jsp相对来说比较容易控制,可以让程序结构清晰,二次开发或者更换
程序员都不会有太大问题。”
老牌计算机作家Bruce
Eckel也这么说:“你经常会发现很多使用PHP编写出的代码错误百出,但这些代码往往却被人们互相拷贝,却没有人去认真分析研究它们。这些代码通常是
由那些习惯互相借鉴拷贝代码的程序员所编写,这些代码质量低劣的原因是这些程序员通常不习惯问为什么,不喜欢弄清楚原理,只管拿来就用。”为了让大家可
信,我放出他的相片吧。
很自然,作为普通读者,会产生一个焦点问题:PHP到底有没有前途?你说有前途是把,再秀几点理由?
5.PHP的解释运行机制
也
许有经验的PHP程序员最感到痛苦的地方是PHP的解释运行机制。这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是
说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量,还是类的静态成员,都会在页面执行完毕后被清
空。以JSP为例,在JSP中,Java
Bean的scope有四种有效值:Page、Application、Session、Request,分别对应页面、程序、会话、请求四种生存期。但
在PHP中,只有Page一种生存期。
在
PHP中,如果需要在页面之间共享数据,需要手动将变量保存到预定义的全局变量$GLOBALS或$_SESSION中。PHP会将这些变量保存在某个文
件中,以便下次执行页面时读取。但是,这种方式存在着极大的限制,除了效率的低下外,它还无法保存引用外部资源的变量,例如文件、Socket、数据库连
接等,而正是这些资源最需要被缓存。
这
导致了许多高级的模式和技术无法使用。例如,即使是最简单的Singleton模式也无法在PHP中被应用。虽然可以使用PHP写出Singleton的
代码,但是由于PHP中没有真正全局的static变量,所以每次页面被执行时,都会重新建立新的对象,这样也就完全失去了Singleton的意义。这
也导致复杂的OR Mapping技术难以应用,因为没有对象的缓存机制,OR Mapping的开销已经使这种技术失去了意义。
6.前途未卜,开源的商业模式到底能撑多久?
对
于从事PHP开发的同志们来说,Mysql的重要性是显而易见的。还是老牌计算机作家Bruce
Eckel的一个观点:PHP主要是与数据库搭配使用,数据库来处理所有一致性问题,因此多数人只关心从数据库中存取数据,而不用再去必须考虑底层的问
题。但是这个语言不仅仅可以处理与数据库交互的上层问题,同样也可以实现与文件系统之间交互的底层问题。我的感觉是,在PHP社区中多数人只关心如何得到
一个好的结果,而没有多少人关心它的真正实现原理,因此才出现了这种错误的倾向。
再看一个新闻(2008-1-21
):国外媒体今天发表分析文章称,Sun之所以斥资10亿美元收购开放源代码软件公司MySQL,主要是为了进军Web2.0软件市场。Sun周三宣布,
该公司已经同MySQL达成最终协议,将以10亿美元收购这家开放源代码软件厂商。从交易价值来看,这是迄今为止开放源代码领域最大的交易,其规模甚至接
近之前所有开放源代码交易的总和,包括红帽以3.26亿美元收购JBoss,Citrix以5亿美元收购XenSource,以及雅虎以3.5亿美元收购
Zimbra。
在《Sun总裁博客:我们为什么收购MySQL》一文中,Sun总裁提出:除了要收购
MySQL,Sun 将提出面向 MySQL 市场的全球支持解决方案。我们将同时在社区和市场两方面注入资金 ——
以加速本行业由专属技术阶段向开放式网络平台阶段转化的进程。并认为:新创公司和网络公司的 CTO
不同意使用收费的非开源产品。他们需要也想要获取源代码以实现优化和快速解决问题(尽管他们乐于对其认为有价值的支持服务付费)。另一方面,更多传统
CIO 不同意使用不受商业关系背景支持的产品—— 因为他们更放心借 Sun 供应商之手来管理全球性业务和关键基础架构。
仔细分析一下吧。
还是那句老话,你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。但是,如同一个有生命力的产品一样,免费的东西,也许会有很多理念的不统一。
< type="text/javascript">
< type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
一个晚上,评论无数。反对的意见也不是不接纳,这里先展示一个老友的反驳意见:
1. 面向对象不足
如果你使用过PHP 5的话,你就不会这样说了,你所想到的东西:访问权限(public/private)、继承、抽象类、接口、克隆、串行化、自动垃圾收集、静态成员、强大的异常处理...
可以说基本上常见的面向对象的东西都有了,不要以为php5很遥远,其实目前有很多人、很多项目都在使用PHP 5,你最好自己尝试一下看看。
建议参考:
http://www-128.ibm.com/developerworks/cn/opensource/os-phpobj/
http://www-128.ibm.com/developerworks/cn/opensource/os-advphpobj/
2. 变量名前面加 $
这个只能算是一个小问题,是PHP告诉大家这是PHP独特特征的地方,PHP不是Java,不是C++,它是从开源世界走出来的脚本语言,有了$,我觉得很亲切,很棒。
3. 不是编译执行
这个当然比不上CGI了,如果你用C写CGI的化,但是我想,PHP的执行速度不会比JSP差到哪里去的吧,也不会比ASP慢。另外,Zend有相关的商业工具来作类似于编译的工作。
4. PHP太灵活
我想,谁都比较喜欢能够自由控制的语言,这样才能体现程序员的技术,当然,灵活也会带来很多问题,比如很容易出错,而且不容易找到,对于初学者的代码可能会写的很糟糕。但是,这就是PHP呀,这才是我们心目中开源的、自由的、高效的PHP
5. 没有MVC框架
呵呵,如果你使用过 phpCake、Zend frame的话,我想你不会说没有框架,只是成熟程度的问题,其实Cake和Zend frame都非常棒,当然,另外一些象 Prado、phpMVC等框架也是值得一提的
参考:http://framework.zend.com/、http://cakephp.org/
6. 没有好的IDE
PHP的特点就是简单,容易开发,你可以使用记事本,vi,也可以使用Editplus、UE,同样也可以使用Nu、Zend等等工具,选择很大,其实不
要跟VS2003比较,因为他们不是一个东西,VS是个统一开发平台,PHP只是一门脚本语言,使用Zend已经足够了,至少我是这么觉得。
7. 扩展不容易写
呵呵,我想ASP的com也不是那么好写的,JSP里面的JavaBeans也不是那么简单的,没有很容易的事情,简单或者复杂程度取决于你对一项事务的
认识程度。如果你C学的好,你就不会觉得扩展不好写。当然,相对来说,用C写PHP扩展是稍微有点复杂,不过,因为复杂,所以你才能靠写扩展拿高薪呀,呵
呵。
建议参考:《PHP程序设计》第十四章[扩展PHP]
8. 调试不方便
我不知道怎样算是调试方便,如果你使用过ruby、perl写cgi,你会知道什么是调试不方便。如果你喜欢写C,使用GDB之类的命令行工具,你会知道什么是不方便。当然了,相对来说,你使用好的IDE,调试的工作量会减少很多的。
分享到:
相关推荐
原来啊,是一个阿里新版本大模型的技术演示脱口秀版GPT——鸟鸟分鸟,并且已经在天猫精灵上为个人终端行业的客户做了演示,量子位抢先体验了一把。 激辩一小时宛如真人面对面,除了社恐这点人设崩塌以外,其他人设...
自《地球最后的夜晚》在中国内地上映以来,电影界及普通观众对该片的讨论...无论《地球最后的夜晚》最终在票房上取得何种成绩,它都已经成为中国电影史上一个值得记住的现象,并为电影的未来发展提供了重要的讨论案例。
激辩_中国_影子银行与金融改革.pdf
旁听者抢话筒激辩封杀住改商广东省物业条例听证会月日.docx
5高管激辩:私域流量是在自嗨?哪些策略可以面对这波大浪?.docx
申万宏源发布的这份报告《20210302-申万宏源-关键假设表调整与交流精粹(2021年3月):激辩,美联储应对策略与周期品产能释放空间.pdf》深入探讨了这些关键议题,为我们理解市场未来的可能走向提供了多维度的分析。...
总的来说,这份PDF文档的内容可能会涵盖以下几个方面:一是美联储的货币政策及其对全球经济的影响,二是周期性商品市场在经济复苏中的角色,三是关键假设表如何反映出市场预期的变化,以及这些变化对投资决策的指导...
数月前无人能预料,「涌现」(Emergence)——这个科学家口中的专有名词会被我们用在日常聊天中,就像无人能预料,以ChatGPT为代表的大型语言模型会突然「涌现」出如此惊人的智能。 面对全新的人机交互方式、持续...
学生会文艺部作为学生自治组织中不可或缺的一部分,承载着丰富校园文化生活、展现学生艺术才华的重任。本文档即为学生会文艺部的年度述职报告,记录了该部门在过去一年里工作的方方面面,反映了其在促进校园文化建设...
律师行业并非只有法庭上的激辩,更多的是日常的细致工作和与当事人的沟通。以下是对实习期间学到的知识点的详细说明: 1. **实习律师的基础工作**:实习律师初期通常从基础工作做起,如复印资料、粘贴票据、装订...
主角文森特(伊桑·霍克饰)在不被看好的环境中,通过毅力和决心实现了太空探索的梦想,证明了人的潜力远超遗传因素。 5. 《万物理论》(The Theory of Everything) 本片讲述了著名物理学家斯蒂芬·霍金的生活,尤其...
该研究计划通过系统的方法和步骤,逐步改变传统的教学结构,以期在小学教育中建立一种以学生为中心,激发学生内在潜力,促进其全面发展的教学模式。这种模式不仅关注学生的学术成就,还注重培养他们的自主学习能力、...
- 校本教研,实践探索“自主学习”的课堂教学模式,采用五条策略(营造氛围、创设情境、培养问题意识、注重过程引领、改变教材)和六个环节(教师引导、启思、点拨、助研、激辩、点评,学生自读、自悟、假设、自究...
《原始的农耕生活》是七年级历史课程中的一课,主要探讨了中国早期人类社会的农耕文明。本课的重点在于了解河姆渡原始居民和半坡原始居民的生活状况,以及他们对我国远古时代社会进步的重要贡献。 河姆渡原始居民...