搜索
首页后端开发php教程大型系统上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同样是一个更好的选择。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
投屏失败的原因是什么「新手必看:无线投屏连接不成功的方法」投屏失败的原因是什么「新手必看:无线投屏连接不成功的方法」Feb 07, 2024 pm 05:03 PM

无线投屏为什么会连接不成功呢?有些小伙伴反映在使用无线投屏的时候,会出现连接失败的情况,这是怎么回事呢?无线投屏连接失败怎么办?请确认您的电脑、电视和手机是否连接在同一个WiFi网络上。投屏软件要求设备在同一网络下才能正常使用,而快点投屏也不例外。因此,请您迅速检查一下您的网络设置。确定是否支持投屏功能很重要。智能电视和手机通常都支持DLNA或AirPlay功能。如果不支持投屏功能,就无法传屏。确认设备是否正确连接:在同一WiFi下的设备可能有多个,确保连接的是想要实现同屏的设备。4、确保网络的

苹果手机充电很慢是什么原因苹果手机充电很慢是什么原因Mar 08, 2024 pm 06:28 PM

使用苹果手机时,一些用户可能会遇到充电速度缓慢的问题。造成这种问题的原因有很多种,可能是由于充电设备功率过低,设备故障,或是手机的USB接口出现问题,甚至是电池老化等因素导致的。苹果手机充电很慢是什么原因答:充电设备问题,手机硬件问题,手机系统问题。1、用户在使用功率比较低的充电设备时,手机的充电速度就会很慢。2、使用第三方的劣质充电器或者是充电线也会导致充电速度很慢。3、推荐用户使用官方的原装充电器,或者是更换正规的有认证的大功率充电器。4、用户的手机硬件出现问题,比如说手机的usb接口接触不

揭秘win11蓝屏导致的根本原因揭秘win11蓝屏导致的根本原因Jan 04, 2024 pm 05:32 PM

相信不少朋友都遇到过系统蓝屏的问题,不过不知道win11蓝屏原因是什么,其实导致系统蓝屏的原因是有很多的,我们可以依次排查进行解决。win11蓝屏原因:一、内存不足1、运行太多软件或者游戏消耗内存太大的时候可能发生。2、尤其是现在win11存在内存溢出的bug,所以很有可能遇到。3、这时候可以尝试设置一下虚拟内存来解决,不过最好的方法还是升级内存条。二、CPU超频过热1、CPU的问题原因其实和内存差不多。2、一般会发生在使用后期、建模等软件,或者玩大型游戏时发生。3、CPU的消耗过大就会出现蓝屏

win11为什么会自动关机win11为什么会自动关机Jan 01, 2024 pm 11:39 PM

最近有朋友在更新系统后,遇到了win11自动关机的问题,很多情况下都会在玩游戏的时候发生,不知道是什么原因导致的。其实这可能是由于电脑配置不足,或者系统故障造成,下面一起来看看原因及解决方法吧。win11自动关机什么原因一、配置不足1、Windows11系统对于cpu和内存要求比Windows10要高一些。2、尤其是在运行大型游戏等任务时,极易出现自动关机的情况。3、用户可以试着还原到自动关机前的使用情况,右键点击开始菜单图标,打开“任务管理器”页面。4、我们在这个页面查看一下CPU、内存、磁盘

win10驱动安装失败的原因及解析win10驱动安装失败的原因及解析Jan 02, 2024 pm 04:57 PM

有些朋友在安装Windows10驱动时遇到了安装失败的问题,但是他们不知道失败的原因是什么,也不知道如何解决。这个问题主要有几个不同的原因,下面请跟随我一起来了解一下。win10驱动安装失败是什么原因:一、系统版本目前,Windows10系统已经具备了自动安装驱动的功能。这一功能的引入,使得用户在安装系统时不再需要手动搜索和安装驱动程序,系统会自动检测并安装合适的驱动程序,提供更加便捷的使用体验。如果你的驱动安装失败,那么一种解决方法是尝试更新系统。这可能会修复一些系统相关的问题,从而使驱动能够

排查HTTP状态码550产生的原因和解决方案排查HTTP状态码550产生的原因和解决方案Feb 20, 2024 am 09:49 AM

探索HTTP状态码550的原因及解决方法引言:在网络通信中,HTTP状态码扮演着重要的角色,用于表示服务器处理请求的结果。其中,HTTP状态码550是一种相对较少见的状态码,通常与服务器拒绝执行请求相关。本文将探索HTTP状态码550的原因,并提供解决方法。一、HTTP状态码的基本概念在了解HTTP状态码550之前,我们先来简单了解一下HTTP状态码的基本概

wifi打不开是什么原因 附:修复wifi功能打不开的方法wifi打不开是什么原因 附:修复wifi功能打不开的方法Mar 14, 2024 pm 03:34 PM

现在手机除了都有数据和wifi两种上网方法,OPPO手机也不例外,但是我们在使用时打不开wifi功能了要怎么办呢?先不要着急,不妨看下本期教程,就能帮助到您了!手机wifi功能无法开启怎么办可能是因为WLAN开关开启时会略有延迟,请等待2秒后观察是否开启,请勿连续点击。1、可尝试进入「设置>WLAN」,尝试重新打开WLAN开关。2、请打开/关闭一下飞行模式,尝试重新打开WLAN开关。3、重启手机尝试是否能正常打开WLAN。4、建议备份数据后恢复出厂设置尝试。若以上方法均未能解决您的问题,请携带购

为何会出现503 Service Unavailable错误?为何会出现503 Service Unavailable错误?Feb 18, 2024 pm 12:34 PM

标题:503ServiceUnavailable是什么原因?文章正文:在我们使用互联网时,有时会遇到一个常见的错误代码:503ServiceUnavailable。这个错误代码指示服务器无法提供请求的服务,但并没有详细说明导致错误的具体原因。那么,503ServiceUnavailable是什么原因呢?本文将探讨一些可能导致该错误的原因。首先,可

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。