OOP值得在PHP中使用吗?

时间:2010-01-23 06:27:34

标签: php oop performance procedural

关于面向对象编程是否优秀,存在许多争论。但是,在Php中使用OOP会更慢。使用过程式编程和更快的速度以及速度更慢的OOP是否是一个好的交易(因为每次页面加载和大型网站开始变慢时都必须启动类。)

更重要的是,将东西包装在一个类中并使用静态函数是不错的,或者只是让许多具有前缀ex:wp_function()的函数更好。

9 个答案:

答案 0 :(得分:12)

如果您担心在PHP中使用OO的原因是速度,请不要担心:PHP是一种缓慢的语言。如果你正在做一些处理器密集的事情,以便从使用对象到物质的速度损失,你根本不应该使用PHP。

关于静态函数,这是一个设计选择,但我错误的是避免完全由静态函数组成的类。它在前缀方面确实没有优势,并且使用构造只是因为它不是一个好主意。

答案 1 :(得分:11)

是的,使用OOP几乎总是一个好主意。这是因为OOP是一种编码风格,大多数编码风格很容易通过语言进行传输。

人们不使用编码风格,因为他们使用某种语言。人们使用编码风格,因为编码风格提供了做他们认为理想的事情的好方法。因此,只要存在基本元素(继承,类属性等),编写该编码风格总是可行的。

不,使用程序功能来访问它们可能不是一个好主意。这是因为,您可能必须做这样的事情来维持状态。

function myFunc()
{
    global $class;
    $class->doMethod();
}

function myFunc2()
{
    global $class;
    $class->doMethod2();
}

这是一个坏主意,因为它创造了大量的全球状态。

答案 2 :(得分:6)

关于性能的相同论点是关于当天的Objective C和C ++。这个问题的答案是利用可用内存和处理能力不断变大,越来越好。

是的,OO需要更多资源才能运行。但是,使用OO的好处超过了支持OO应用程序的硬件成本$$(这可能是微不足道的)。

然而,关注软件性能是件好事。然而,在程序与oo的引导下寻找开始的地方有点误导。您需要专注于编写有效的代码,无论是程序性还是OO(两者都是相关的)。

请记住,即使PHP可能不是最快的平台(例如,Java,它会踢它的屁股)PHP被用来为互联网上一些流量最大的网站提供动力:即Facebook。

如果您对PHP和OO有任何其他疑问,请查看Zend和Magento(基于Zend)。 Magento是一个非常资源密集型平台,每个实例的内存使用量可超过36MB。然而,该平台本身能够处理数百万次点击。这是因为正确配置的服务器环境具有健康的硬件资源,使得使用OO的所有好处远远超过了服务器本身的成本。但在群集计算机的世界中,不使用可用的处理能力和内存(负责任)是 - 恕我直言 - 临床精神错乱。

答案 3 :(得分:5)

在我看来,PHP开发人员不应该试图单独单向。 (过程与面向对象)在某些情况下,您只需要一些全局函数,有时使用对象更有利。不要试图以某种方式强迫一切,要灵活使用最适合每种情况的东西。

答案 4 :(得分:5)

我强烈不同意Chacha102的回答。

这个问题的正确答案会填满几本书 - 不用担心这里的20行文章。

这两种方法都有其优点和缺点。我建议任何想要认为自己都是优秀程序员的人在程序,非程序和面向对象编程方面拥有丰富的经验。以及SCRUM,cascade和RAD等不同方法的经验。

关于PHP对OO与程序编码的适用性,当然语言的根源在后者中(但请注意,Java和ASP都是混合而不是真正的OO语言)。

Peronally,我倾向于编写程序代码,当我需要生成一些非常简单或必须使其行为被定义和可预测的东西时。但是,当编写复杂的代码时,行为会在运行时发生很大变化,我发现OO在开发人员时间方面要高效得多 - 尽管设计基于一组有限的用例。

认为你应该总是编写程序代码,因为它比OO代码运行得更快:

1)不一定是真的 2)完全忽略开发人员时间与硬件成本的相对成本

  

将东西包装在一个类中并使用静态函数

会不会很好

鉴于命名空间现在可以在PHP中使用,这是一种非常混乱的方法来避免命名空间冲突,而不是我建议的。

下进行。

答案 5 :(得分:3)

OOP比其优点更有优点。 See PHP OOP, What Are The Benefits?。另请参阅OOP vs PP in PHP

答案 6 :(得分:3)

真的没有完美的答案,因为它取决于很多未知的变量,然后它不一定是全有或全无。

例如,如果将应用程序拆分为MVC模型,则可能使模型成为OO,但保持Controller更简单的程序化。

您可以使用类作为简单地对常见静态函数进行分组的方法,或者您可以将它更多地放在活动记录模式中。

如果您正在构建一个小型的单页网页表格,可以通过电子邮件发送POST,那么您真的不需要OO - 以免您可能包含现有的邮件类别。

没有理解你正在进行的项目,没有人能给你适当的建议。

那就是说,如果你唯一关心的是速度,那么OO 会稍微慢一些。即使是程序化的PHP,你也可以做很多偷偷摸摸的事情来模仿OO的一些收益。但除非你正在承担一个庞大的项目,否则增加的开销将永远不会太多。当你有一个庞大的项目时,OO的优点可能会超过它的开销。

答案 7 :(得分:2)

是的,因为你的应用程序在增长..(它会)它会为你节省很多时间的挫败感。并重复自己(在整个地方复制粘贴代码).. :))

答案 8 :(得分:2)

我自己很好奇。不幸的是,在我将代码从程序改为oop之后,我运行了一些基准而不是事先。

这是基准代码。

class game{
  function maxp($val){
    return max(0,pow($val,0.5));        
  }
}

$game = new game;

for($i=0;$i<100000;$i++){
  $game->maxp(100);
  //game::maxp(100);
}

OOP结果介于0.13和0.2秒之间;

程序结果介于0.08和0.1秒之间。

结果在很长一段时间内保持一致。

我鼓励你自己进行测试。

php 5.4.3