【问题标题】:Is OOP necessary in PHP sites, can't I just apply its concept to procedural code.... cake and eat it?在 PHP 站点中是否需要 OOP,我不能将其概念应用到程序代码中......蛋糕吃掉吗?
【发布时间】:2011-12-01 15:39:09
【问题描述】:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

  • TL;博士。这不是更适合programmers.stackexchange.com 吗?只是问
  • 我最近几天才注意到这个 TL;DR,它已经让我很生气了。如果你不介意阅读它,为什么还要写任何东西呢?
  • 虽然你是对的,但更适合programmers.stackexchange.com
  • 我认为网络的本质是面向对象的。仅仅因为您不创建类并不意味着您没有使用 OOP。例如,您可以将 DOM 视为 OOP。您有元素的各种属性(颜色、字体等)。您在元素(孩子,父母)之间有关系。我相信,如果您真正了解 Web 编程,它就是 OOP。当然,您可能有程序代码,但您会生成对象。
  • 语法约定与应用程序功能或任务无关。 OOP 只是为了更简洁、有时更连贯的代码提供便利;如果使用正确。 (单个 get 方法示例只是一个误用。)

标签: php oop procedural-programming


【解决方案1】:

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

通常 OO 原则使事情变得更容易(这也是 OO 如此受欢迎的原因之一),但它们绝不是必需品。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 我个人不担心速度,并尝试根据需要在脚本中平衡 OOP 和程序的使用。可能有点过分强调速度的必要性:)
    • php7 可能是最快的网络语言了。
    【解决方案3】:

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

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

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

    不要编写程序代码,因为它“更快”。太傻了。

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

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

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

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

    不过没必要。

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

    在 OO 编程中,它完全是关于封装的,这意味着将一组数据绑定到一些操作它的函数。

    您也可以使用一组将数据对象作为第一个参数或类的函数来做到这一点。

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

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

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

    【讨论】:

    • 游戏示例更多地是关于利用公共元素的继承。例如 - 4 个瓷砖具有相同的岩石/泥土/草,但一个有树,一个只有草,另外两个每个上有不同类型的树。之类的东西。扩大规模,我认为 OOP 会胜出。我通常将 OOP 用于站点脚本的某些部分。我试图平衡它,当 Comeone 疯狂上课时,阅读起来会变得相当复杂
    【解决方案4】:

    我认为很多推广 OO 的人都比较年轻,并且只写过 / 教过 OO,因此非常消极地将程序视为过时和“遗留”。

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

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      相关资源
      最近更新 更多