2

我知道有无数关于 OOP 和过程之间的区别、何时使用以及好处是否超过额外开销、学习语法、继承混淆等问题。我发现的大部分内容往往只是讨论差异和好处而不是它是否有必要。

我通常根据我正在做的事情在同一个站点脚本中混合 OOP 和程序。我对 OOP 还是很陌生,实际上我很喜欢 OOP 的模块化性质及其带来的好处,即使有一点点开销。不过,继承有时会让人有些困惑!

对我来说,主要的好处似乎只是更好地组织和保护代码。其中,开发人员或开发人员团队是唯一欣赏它的人。我想有一个部署速度的例子,但不会说大多数网站都有很多,除非你继承了别人的鸟巢:)

但是,在大多数 PHP 应用程序中是否需要 OOP,尤其是当执行速度是大多数网站的圣杯时?好的,所以毫秒开销不会真正注意到,除非是一个大量使用的网站,但作为电子音乐的粉丝,速度才是王道!

我在游戏和实时云软件等复杂事物中使用 OOP,但是静态网站?甚至是数据库重的?

有没有人有从 OOP 中受益的典型站点的真实示例,为什么?

假设这两种情况都结构良好,那么像 ebay 或 monster.co.uk 这样的重度使用网站会从 OOP 或程序 () 的速度改进中受益更多吗?为什么?

至少在程序上,您可以从上到下进行调试,而不必在脚本中反复检查类、扩展和接口。

我不能用清晰的 MVC 和注释良好的代码来应用 OOP 模块化思维吗?

例如,我将可重用函数保存在包含文件中,并将相关函数组合在一起。我所要做的就是像包含类文件一样包含文件并调用函数。如果函数需要改变,它只在一个地方改变,类似于一个类。

并且在程序中已经存在一种继承,而不必跳过箍来声明它。您没有相同级别的控制,但它可以快速完成工作。

您甚至可以通过将父函数中的函数分组并使用选择器函数来访问它们来模拟一个类。不过,这有点远!

此外,据我所知,当调用函数时,它会保留在内存中,从而使后续使用更快。而对于 OOP,您必须创建不同方法的两个对象才能对两个不同的变量使用相同的函数。如我错了请纠正我。

当我可以直接使用程序引用值时,为什么要创建一个对象并使用一种方法来“获取”一个值?

到目前为止做得很好,没有意识到我输入了这么多。无论如何,在我进一步离题之前,我将在这里结束它。

因此,如果您有任何从 OOP 或程序中受益的实际站点或站点部分的良好示例,我将非常感谢您的清晰说明。

4

4 回答 4

9

早在 OO 语言流行之前,人们就设法编写出良好、清晰、组织良好的代码。我看不出为什么它现在仍然不能完成。

一般来说,OO 原则使它更容易(这是 OO 如此受欢迎的原因之一),但它们绝不是必需品。

于 2011-12-01T15:49:54.567 回答
4

这里有很多问题。我记得在大学时写过一篇长篇文章来解决其中的一些问题,但我不想在这里复制类似的东西,所以让我分享一些想法:

但是,在大多数 PHP 应用程序中是否需要 OOP,尤其是当执行速度是大多数网站的圣杯时?好的,所以毫秒开销不会真正注意到,除非是一个重度使用的网站,但作为电子音乐的粉丝,速度才是王道!

我认为如果执行速度对您来说真的很重要,那么 php 不是您网站的正确语言。与使用解释语言的巨大性能成本相比,与 OOP 编程风格创建大型系统的优势相比,一点点开销可以忽略不计。不要低估让程序员做事变得容易的重要性,因为这意味着更快的发布、更少的错误和更可维护的代码。

我在游戏和实时云软件等复杂事物中使用 OOP,但是静态网站?甚至是数据库重的?

我同意你的看法。网站的一个好处是它们自然是模块化的,因为它们被分成页面。很难编写如此糟糕的代码以至于未来的程序员无法维护它(对于一个相当简单的静态网站)。

例如,我将可重用函数保存在包含文件中,并将相关函数组合在一起。我所要做的就是像包含类文件一样包含文件并调用函数。如果函数需要改变,它只在一个地方改变,类似于一个类。

你可以写出好的过程代码,但比写好的 OOP 代码更难。在使用 OOP 系统时,较弱的程序员不太可能编写疯狂的意大利面条代码。

当我可以直接使用程序引用值时,为什么要创建一个对象并使用一种方法来“获取”一个值?

这是您唯一真正的实施问题。Getters/Setters 的想法是,您可以在不破坏依赖它的其他代码的情况下更改类的内部工作。

于 2011-12-01T15:58:25.127 回答
2

我在游戏和实时云软件等复杂事物中使用 OOP,但是静态网站?甚至是数据库重的?

暗示您不想要游戏速度但想要网站速度。

PHP 永远不是瓶颈,如果是,请用 C 编写。

不要编写程序代码,因为它“更快”。这很愚蠢。

有没有人有从 OOP 中受益的典型站点的真实示例,为什么?

网站受益于可维护且组织良好的模块化代码。

为此,您不需要 OO,您可以使用函数式或命令式样式来实现。然而,PHP 以易于以过程风格编写糟糕的代码而闻名。

我个人会说,如果它是面向对象的,那么您的代码更有可能是模块化和可维护的。

但这不是必需的。

并且在程序中已经存在一种继承,而不必跳过箍来声明它。您没有相同级别的控制,但它可以快速完成工作。

在 OO 编程中,这一切都与封装有关,这意味着将一组数据绑定到一些操作它的函数。

您可以使用一组将数据对象作为第一个参数或类的函数来执行此操作。

类和 OO 只是为您提供糖和实用程序。

它是编写模块化代码的工具,如果它可以帮助您使用它。

不要因为它“慢”而预先成熟地优化 OO。如果您关心这种微优化,那么就开始编写 C 或 ASM。

于 2011-12-01T15:53:54.273 回答
2

我认为很多推广 OO 的人都比较年轻,并且只写过 / 教过 OO,因此对程序化的过时和“遗留”持有非常负面的看法。

IMO 很容易编写模块化的程序 PHP,它是 DRY 并且易于维护。诀窍是使用函数和“包含”分别重用标准 php 和 html。归根结底,PHP 只是读取 DB 并生成 html - 如果您不想添加额外的 OO 复杂性,则无需特别添加。

于 2016-10-21T16:23:27.027 回答