`
xiaoer_1982
  • 浏览: 1894638 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

为什么说用PHP开发大型系统令人不爽

阅读更多

为什么说用PHP开发大型系统令人不爽

来自:太平洋电脑网

笔者在过去的四年里一直致力于PHP应用的开发。PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。

  下面笔者会给出自己的理由,为什么PHP不适合于比小型业余网站更大的网站。

  1. 对递归的不良支持

  递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,PHP并不擅长递归。Zeev,一个PHP开发人员,说道:“PHP 4.0(Zend)对密集数据使用了栈方式,而不是使用堆方式。也就是说它能容忍的递归函数的数量限制和其他语言比起来明显少。”见bug 1901。这是一个很不好的借口。每一个编程语言都应该提供良好的递归支持。

  2. 许多PHP模块都不是线程安全的

  在几年前,Apache发布了Web服务器的2.0版。这个版本支持多线程模式,在这个模式下,软件一个一部分可以同时运行多个。PHP的发明者说PHP的核心是线程安全的,但是非核心模块不一定是。但是十次有九次,你想要在PHP脚本中使用这种模块,但这又使你的脚本不能合适Apache的多线程模式。这也是为什么PHP小组不推荐在Apache 2 的多线程模式下运行PHP。不良的多线程模式支持使PHP常被认为是Apache 2依然不流行的原因之一。

  请阅读这篇讨论: Slashdot: Sites Rejecting Apache 2?.

  3. PHP 由于商业原因而不健全

  通过使用缓存,PHP的性能可以陡增500%[见基准测试]。那么为什么缓存没有被构建在PHP中呢?因为Zend——PHP的制造者,它在销售自己的Zend Accelerator,所以当然,他们不想抛弃自己的商业产品这块肥肉。

  但是有另一个可选择的: APC. (Zend后来推出Zend Optimizer,免费的加速器——译者)

  4. 没有命名空间

  设想某个人制作了一个PHP模块用来阅读文件。模块中一个函数叫做read。然后另一个人的模块可以读取网页的,同样包含一个函数read。然后我们就无法同时使用这两个模块了,因为PHP不知道你要用哪个函数。

  但是有一个很简单的解决方法,那就是命名空间。曾经有人建议PHP5加入这个特性,但不幸得是他没有这么做。现在,没有命名空间,每个函数都必须加上模块名作为前缀,来避免名称冲突。这导致了函数名恐怖得长,例如xsl_xsltprocessor_transform_to_xml让代码难于书写和理解。

  5. 不标准的日期格式字符

  很多程序员对 日期格式字符 都很熟悉,它是从UNIX和C语言中来的。其他一些编程语言采用了这个标准,但是很奇怪的,PHP有它自己的一套完全不兼容的日期格式字符。在C中,“%j”表示一年中的当天,在PHP中他表示一个月中的当天。然而使事情更混乱的是:Smarty (一个很流行的PHP模版引擎)的 strftime 函数和 date_format 函数,却使用了C/UNIX的格式化字符。

  6. 混乱的许可证

  你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。错了!例如,如果你想在PHP中生成PDF文件,你会在手册中发现两个模块:PDF 和 ClibPDF。但是这两个都是有商业许可证的。所以,你所使用的每个模块,你都要确保你同意他的许可证。

  7. 不一致的函数命名规则

  有些函数名称是有多个单词组成的。一般有三种单词组合的习惯:

  直接拼接:getnumberoffiles

  用下划线分开:get_number_of_files

  骆驼法则:getNumberOfFiles

  大部分语言选择其中一中。但是PHP都用到了。

  例如,你想要把一些特殊字符转换成HTML实体,你会使用函数htmlentities(直接拼接单词)。如果你要使用相反的功能,你要用到它的小弟弟html_entity_decode。由于某些特殊的原因,这个函数名是由下划线分隔单词。怎么能这样呢?你知道有一个函数叫strpad。或者他是str_pad?每次你都要查看一下到底这个符号是什么或者直接等他出现一个错误。函数是不分大小写的,所以对于PHP来说rawurldecode和RawUrlDecode之间没有什么区别。这也很糟糕,因为两个都使用到了同时他们看上去还不一样,混淆了阅读者。

  8. 魔法引用的地狱

  魔法引用(Magic quote)可以保护PHP脚本免受SQL注入攻击。这很好。但是出于某些原因,你可以在php.ini中关闭这个配置。所以你如果要写出一个有弹性的脚本,你总要检查魔法引用是开启还是关闭。这样一个“特性”应该让编程更简单,而事实上变得更复杂了。

  9. 缺少标准框架

  一个成长中的网站没有一个整体框架,最终会变成维护的噩梦。一个框架可以让很多工作变得简单。现在最流行的框架模型时MVC-模型,在其中表现层、业务逻辑和数据库访问都分离开了。

  很多PHP网站不使用MVC-模型。他们甚至没有一个框架。甚至现在有一些PHP框架同时你都可以自己写一个,关于PHP的文章和手册没有提高框架的一个字。同时JSP-开发人员使用像Struts的框架、ASP开发人员使用.Net,看起来好像这些概念都广泛被PHP开发人员所了解。这就说明了PHP实际上到底是多专业。

  总结

  什么问题?

  对于非常小的项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。当你不断地摸索之后,你会发现笔者提到的某些问题的解决方案。所以,当解决方案已知之后,为什么不能修正他呢?另外为什么这些修补不在手册中提到呢?

  一个开源的语言十分流行是一件好事。但不幸得是,它不是一个伟大的语言。笔者希望所有的问题能有一天得到解决(也许在PHP6?),然后我们就将拥有一个开源语言,他既开源,又好用。

  到现在,当你要启动一个多于5个脚本页面的项目的时候,你最好考虑C#/ASP.Net 或者 Java/JSP或者也许Python同样是一个更好的选择。

分享到:
评论

相关推荐

    用php开发的一个物流管理系统

    这个用PHP开发的物流管理系统,对于正在学习PHP编程的人来说,是一个很好的实践案例。PHP是一种广泛使用的服务器端脚本语言,尤其适合Web开发,因其开源、免费且功能强大而深受开发者喜爱。 在物流管理系统的开发中...

    基于PHP的大型ERP管理系统源码.zip

    基于PHP的大型ERP管理系统源码.zip

    大型网站后台管理系统(PHP)

    总的来说,《大型网站后台管理系统(PHP)》这本书将带领读者深入理解如何利用PHP和Oracle构建大型网站后台,涉及的内容全面且实用,适合希望提升后台开发能力的PHP开发者阅读学习。通过书中的源代码实例,读者可以...

    PHP实例开发源码-php仿1999招聘网大型人才招聘系统.zip

    PHP实例开发源码—php仿1999招聘网大型人才招聘系统.zip PHP实例开发源码—php仿1999招聘网大型人才招聘系统.zip PHP实例开发源码—php仿1999招聘网大型人才招聘系统.zip

    利用PHP开发的报名系统开发

    【PHP 报名系统开发详解】 在信息技术日新月异的今天,PHP作为一种流行的服务器端脚本语言,被广泛应用于网站开发,尤其是构建各种在线交互系统,如报名系统。本篇将详细介绍如何利用PHP开发一个通用的网上报名系统...

    博客系统(《深入体验php项目开发》的源码)

    《深入体验PHP项目开发》一书的源码提供了一个完整的博客系统实现,旨在帮助读者深入理解PHP编程在实际项目中的应用。这个博客系统涵盖了从基本的...同时,对于想要从事PHP开发的人来说,这是一个很好的实战学习资源。

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

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

    基于PHP的大型博客系统源码.zip

    【描述】: "基于PHP的大型博客系统源码.zip" 指的是一个使用PHP编程语言开发的博客平台的完整源代码压缩包。此项目可能包含了前端界面、后端逻辑、数据库交互以及用户管理等多个模块,旨在为用户提供丰富的博客创作...

    php开发的超市管理系统

    **PHP开发的超市管理系统** PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在Web开发领域,PHP以其高效、灵活和易学的特点备受青睐。本系统是利用PHP技术构建的一个超市管理系统,旨在提供一套...

    辰光PHP客服系统多商户全开源V3.1版 客服系统源码带安装教程

    总的来说,辰光PHP客服系统V3.1提供了多商户管理、全开源的特性,结合PHP强大的Web开发能力,为电商和企业提供了可靠的在线客服解决方案。无论是小型商店还是大型电商平台,都能从中受益,提升客户服务体验,增强...

    物流管理系统(php+mysql)

    总的来说,这个"物流管理系统(php+mysql)"是一个实用的工具,它利用PHP的动态特性与MySQL的强大数据处理能力,为物流行业提供了一个高效、可靠的信息化解决方案。无论是对于初学者还是有经验的开发者,这个项目都...

    php 实现 工资管理系统 开发(开发环境wampserver)

    (1) 必须提交系统分析报告,包括系统的功能分析、系统的功能模块设计、数据库的数据字典,数据库的概念结构(E-R图),数据库中的表、视图(如果使用)、存储过程(如果使用)的结构和定义(可以用SQL脚本提供)...

    基于PHP的大型体育即时比分建站系统 php版.zip

    【标题】"基于PHP的大型体育即时比分建站系统 php版.zip" 提供的是一个使用PHP编程语言构建的体育赛事实时比分更新系统。这个系统专为大型体育网站设计,能够实时展示各种体育比赛的最新分数,包括足球、篮球、网球...

    c# ,java,PHP 海康威视web最新版开发包,正在使用源码

    对于开发人员来说,这意味着在使用这个开发包时需要确保他们的开发环境是32位的,或者如果他们打算在64位系统上运行,需要考虑兼容性问题。 总的来说,这个开发包为多语言Web开发提供了便利,无论你是C#、Java、PHP...

    PHP点菜系统管理

    本文将深入探讨一款基于PHP开发的点菜后台管理系统,该系统着重于数据库的管理和操作,包括数据的增、删、改、查等核心功能。我们将详细解析其背后的技术实现,并结合MySQL数据库、HTML等技术,为读者呈现一个完整的...

    基于php的大学生宿舍管理系统

    - **域名绑定与SSL证书**:为系统配置域名,并考虑使用SSL证书以保证数据传输的安全性。 5. **后期维护与扩展** - **版本控制**:通过Git等版本控制系统管理代码,便于团队协作和历史版本回溯。 - **性能优化**...

    PHP设备管理系统

    7. **报表与统计**:系统提供丰富的报表和数据分析功能,如设备使用率、维修成本分析、设备寿命预测等,为决策提供数据支持。 8. **集成与扩展**:PHP设备管理系统采用模块化设计,易于与其他系统集成,如ERP、CRM...

    php OA办公系统源码,php开源源码,正版购买,最后修改版,功能完好版

    这对于大型企业或对数据安全有严格要求的组织尤为重要,能够保证系统的稳定运行和持续升级。 5. **系统功能** - **文档管理**:提供文档上传、下载、版本控制、权限设置等功能,便于知识共享和文档安全。 - **...

Global site tag (gtag.js) - Google Analytics