目录
1.应用范围仍然有限
2.调试还是不太方便
3.主流版本的安全漏洞百出
4.大型系统的稳定性与一种语言的风格
5.PHP的解释运行机制
6.前途未卜,开源的商业模式到底能撑多久?
一个晚上,评论无数。反对的意见也不是不接纳,这里先展示一个老友的反驳意见:
首页 php教程 php手册 大型系统上PHP不称职的六个理由(拍砖激辩中)

大型系统上PHP不称职的六个理由(拍砖激辩中)

Jun 06, 2016 pm 07:56 PM
php 大型 系统

本文发出后,确实引起不少的争议。看来PHP的支持者不少

本文发出后,确实引起不少的争议。看来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_globalssafe_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不称职的六个理由(拍砖激辩中) 

很自然,作为普通读者,会产生一个焦点问题: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模块也是免费的。但是,如同一个有生命力的产品一样,免费的东西,也许会有很多理念的不统一。

 

 

一个晚上,评论无数。反对的意见也不是不接纳,这里先展示一个老友的反驳意见:

  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,调试的工作量会减少很多的。 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1242
24
在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? 什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

说明匹配表达式(PHP 8)及其与开关的不同。 说明匹配表达式(PHP 8)及其与开关的不同。 Apr 06, 2025 am 12:03 AM

在PHP8 中,match表达式是一种新的控制结构,用于根据表达式的值返回不同的结果。1)它类似于switch语句,但返回值而非执行语句块。2)match表达式使用严格比较(===),提升了安全性。3)它避免了switch语句中可能的break遗漏问题,增强了代码的简洁性和可读性。

See all articles