19

关于面向对象编程是否好有很多争论。但是,在 PHP 中使用 OOP 比较慢。使用过程编程和更快的速度和速度更慢的 OOP 是否是一个很好的交易(因为每次页面加载时都必须启动类并且大型网站将开始变慢)。

更重要的是,将东西包装在一个类中并使用静态函数会更好,还是只有许多带有前缀 ex: wp_function() 的谎言函数会更好。

4

9 回答 9

12

如果您担心将 OO 与 PHP 一起使用的原因是速度,请不要担心:PHP 是一门很慢的语言。如果您正在做一些处理器密集型的事情,以致因使用对象而导致速度损失,那么您根本不应该使用 PHP。

关于静态函数,这是一种设计选择,但我宁愿避免完全由静态函数组成的类。与前缀相比,它确实没有任何优势,并且仅仅因为它的存在而使用构造并不是一个好主意。

于 2010-01-23T06:33:07.827 回答
10

是的,使用 OOP 几乎总是一个好主意。这是因为 OOP 是一种编码风格,并且大部分编码风格很容易跨语言转移。

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

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

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

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

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

于 2010-01-23T06:30:31.910 回答
6

我强烈不同意 Chacha102 的回答。

这个问题的正确答案会填满几本书——别介意这里有 20 行的帖子。

这两种方法都有其优点和缺点。我会推荐任何想要将自己视为优秀程序员的人,以在过程、非过程和面向对象的编程方面拥有丰富的经验。以及使用 SCRUM、级联和 RAD 等不同方法的经验。

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

就个人而言,当我需要生成一些非常简单或必须使其行为得到彻底定义和可预测的东西时,我倾向于编写程序代码。然而,当编写行为在运行时变化很大的复杂代码时,我发现 OO 在开发人员时间方面效率更高——尽管设计基于有限的用例集。

要争辩说您应该始终编写过程代码,因为它比 OO 代码运行得更快:

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

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

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

C。

于 2010-01-23T10:49:56.073 回答
6

过去,关于性能的争论也出现在 Objective C 和 C++ 上。这个问题的答案是利用可用的内存和不断变大、更好和更快的处理能力。

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

然而,关注软件性能是一件好事。然而,将程序与 oo 的引擎盖下作为一个开始的地方有点被误导了。首先,您需要专注于编写高效的代码,无论是过程代码还是 OO(两者都是相关的)。

请记住,即使 PHP 可能不是目前最快的平台(例如 Java,它的屁股),PHP 也被用于为 Internet 上一些流量最大的网站提供支持:即 Facebook。

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

于 2012-05-21T20:57:59.543 回答
5

在我看来,PHP 开发人员不应该尝试一个方向。(过程与面向对象)在某些情况下,您所需要的只是一些全局函数,而其他时候使用对象会更有益。不要试图以一种或另一种方式强迫一切,要灵活并使用最适合每种情况的方法。

于 2010-01-23T08:03:48.277 回答
4

我自己对此很好奇。不幸的是,在我将代码从程序更改为 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

于 2014-07-27T09:30:04.617 回答
3

OOP 的优点多于缺点。请参阅 PHP OOP,有什么好处?. 另请参阅PHP 中的 OOP 与 PP

于 2010-01-23T06:33:30.057 回答
3

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

例如,如果您将应用程序拆分为 MVC 模型,则您的模型可能是 OO 的,但控制器的程序会更加简单。

您可以使用类作为简单地对常见静态函数进行分组的一种方式,或者您可以将其深入到活动记录模式中。

如果您正在构建一个在电子邮件中发送 POST 的小型单页 Web 表单,那么您真的不需要 OO —— 以免您可能包含一个现有的邮件类来利用。

如果不了解您正在进行的项目,没有人可以给您适当的建议。

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

于 2012-08-01T06:43:20.207 回答
2

是的,随着您的应用程序的增长..(它会)它将为您节省很多时间的挫败感。并重复自己(到处复制粘贴代码).. :)

于 2010-01-23T06:36:10.187 回答