为什么许多流行的开源PHP应用程序都是普通脚本

时间:2010-01-02 10:32:00

标签: php open-source shared-hosting scripting

这是部分观察,部分问题 首先观察:
虽然每个人都谈到模块化编程,OOP,程序正确,面向方面,设计模式等,但几个流行的开源PHP应用程序都是普通脚本文件,其结构由includesrequires控制。 / p>

在我遇到共享网络托管主机的最新问题之前,这看起来很愚蠢 - 他们不支持共享主机上的MySQL存储过程。我检查了许多竞争共享主机包 - 同样的故事 然后我使用SQL查询和DB处理类中的一些静态函数重写了代码 那时我意识到所说的PHP项目实际上考虑了整个网络托管软件包,因此决定尽可能保持代码愚蠢,以便达到更广泛的用户群。登记/> 另一件事是在没有正式的软件工程背景的情况下脚本可以覆盖新手:脚本更容易被新手攻击

这两个是我看到解释这一现象的充分理由 毫无疑问,维护这些项目的人非常擅长软件开发,所以它并不是无能为力 有时他们也有闲钱。

现在的问题是:您能想到其他明智的理由吗?


编辑:我个人觉得这不仅仅是关于OOP,正如其他人所指出的,良好的代码结构并不依赖于OOP / Procedural风格。我自己看过并编写了一些基于函数的PHP项目。

最困扰我的是文件夹/文件系统布局好,文件/文件夹命名很好,文档很多,遵循标准,当你打开文件时阅读代码,有一百个if-then-else条件,版本检查,奇怪的输出缓冲使用,cookie操作代码,一些常量,包括,并且在许多文件中没有明确的结构。

至少我每次尝试阅读代码时都会丢失。但是,如果我从Java或C#代码库中读取代码,或者甚至是其他一些边缘化的PHP应用程序 - 在函数内部有适当的代码分离,模板用于显示等等。看起来很有条看起来容易理解。
对于维护者来说,向后兼容性可能是 问题,但是他们可以更加结构化地制作下一个版本。但这也不会发生! 显然,我错过了一些东西,因为毕竟这些维护者总是努力工作。

4 个答案:

答案 0 :(得分:3)

在使用PHP构建应用程序时,提供程序兼容性在许多方面都是一个问题,这并不是某些项目中不使用OOP的原因。

几个面向对象的编程特性,如接口,public/private/protected关键字等,可以是only found in PHP 5。一些应用程序仍然支持PHP 4,主要是因为仍有提供商不会升级(出于对其客户的PHP 4应用程序将崩溃的合理担心)。因此,仍有很多“原始”PHP 4 OOP代码。但是没有活着的PHP版本不支持至少基本的OOP。

includerequire用于将代码段导入当前脚本。您也可以在面向对象的应用程序中找到它们。

有几种软件产品几乎完全不使用OOP,只要整体代码质量有序,这样就可以了。虽然许多人(包括我自己)认为它是编写更好,更可重复使用的软件的重要方法,但OOP并不需要编写好的软件。

答案 1 :(得分:2)

我认为有三个主要原因:

  • 兼容性:PHP从一开始就没有包含OOP。为了与较旧的PHP环境向下兼容并为了覆盖更广泛的受众,您将保持现状。
  • 努力转换:将非OOP的代码库切换/重构为OOP是很多(!!)工作,我认为转换脚本不是解决方案,因为它们倾向于为机器生成代码而不是为人类。从运行时方面来看这是可以的,但对维护来说很糟糕。
  • 团队文化:我和一些PHP开发人员谈过,有些人只是不想进行切换,因为他们说一切都很好并且正在工作......

答案 2 :(得分:1)

使用PHP进行所有OOP的最大障碍之一是必须在每次点击的页面上重新加载,初始化和执行所有内容。如果你设计了一个真正面向对象的PHP系统,那么性能可能会非常糟糕。只需要加载和配置很多文件和对象即可。一切都必须加载,并准备在一秒钟内(理想情况下更少)。 相比之下,比较一个基于Java的系统,如果系统启动需要10分钟,那么它并不重要。一旦它启动,一切都已加载并准备就绪。

WordPress可能是一个很好的例子,说明在创建包含大量文件的模块化系统时,事情会变得多么缓慢。更少的模块化OOP系统。对一个简单的“Hello World”页面进行负载测试直接WordPress安装将获得大约10-15页/秒。相比之下,使用直接的“Hello World”php脚本可以获得超过一百页/秒的速度。 您可以通过缓存解决这些问题,WordPress,Symfony和其他系统都可以这样做。

答案 3 :(得分:-2)

除非你在PHP中使用MVC框架,否则这种面向对象的方法(如ASP .NET)会花费你太多的时间。实际上你需要先设计自己的框架。

我不能说在php中使用真正的面向对象方法是不可能的。您可以随意获取对象并序列化以在会话中对它们进行争论......

当谈到PHP中的MVC框架时,您可以看到一种真正的面向对象的方法。

点击此处查看Zend Framework example

Zend Framework不是唯一的。

但是“面向对象”这个词对于PHP来说是新的。只有PHP5被认为具有真正的OOP。因此,您需要等待1到2年才能获得具有真正面向对象方法的良好脚本。