Php 什么时候从过程切换到OOP?

Php 什么时候从过程切换到OOP?,php,oop,procedural-programming,Php,Oop,Procedural Programming,在大多数关于OOP的讨论中,都说它的优点是可重用性。。为了定义类,您需要做一些额外的工作,这样可以节省以后创建这些对象的许多实例和扩展的时间 这种情况的一个腐蚀性似乎是,在将所有内容写入对象的权衡与节省的时间相等之前,不应该从过程编程切换到面向对象编程 一般来说,什么时候是从过程编程切换到面向对象编程的好时机?是否有任何迹象/特征可以让您了解您的项目需要进行转换?如果它不是一个非常简单的应用程序,现在就是时候了。事实上,您应该始终使用OOly编程,这是有争议的,因为如果您将来想要扩展您的程序,这

在大多数关于OOP的讨论中,都说它的优点是可重用性。。为了定义类,您需要做一些额外的工作,这样可以节省以后创建这些对象的许多实例和扩展的时间

这种情况的一个腐蚀性似乎是,在将所有内容写入对象的权衡与节省的时间相等之前,不应该从过程编程切换到面向对象编程


一般来说,什么时候是从过程编程切换到面向对象编程的好时机?是否有任何迹象/特征可以让您了解您的项目需要进行转换?

如果它不是一个非常简单的应用程序,现在就是时候了。事实上,您应该始终使用OOly编程,这是有争议的,因为如果您将来想要扩展您的程序,这将更加困难。

我假设这个问题是从初学者的角度/范式出发的。一旦程序员有了编写面向对象代码的经验,您当然可以从一开始就使用这种体系结构来编写项目。事实上,我认为自上而下的方法可以为大型项目节省大量时间

不过,对于您概述的自底向上的场景,我认为您必须体验一下。一般来说,有关不同方法的更多信息,请参考维基百科文章

具体到PHP,我认为您可以使用这种方法进行迁移:

  • 尽可能多地使用代码(即: 相关功能)并放置它们 包括文件
  • 为该文件创建一个容器类。您可以从以某种方式调用所有函数开始,甚至使用静态(单例)类
  • 逐渐转换为实例范式,而不是全局数据/静态函数范式,这是过程编程的缺点

  • 这个过程是了解OO的细节的一个很好的方法,最终你会看到它的好处。它还将告诉你我的初始观点:将某些东西转换为OO所需的时间要比从一开始就进行良好(高阶)设计所需的时间长得多。

    我认为这取决于上下文。对于使用现有OOP框架的图形应用程序,权衡是即时的——在某些上下文中,您必须不遗余力地编写程序化GUI代码


    但是,如果您正在进行原始数据处理,并且没有与任何OOP框架进行互操作,则可能会发现OOP毫无意义。

    在项目中切换到OOP可能非常耗时。我怀疑它是否有利可图,因为它需要大量的编码、大量的测试,然后是大量的重构。OOP的整体概念不同于PP


    因此,我建议不要在项目内切换,而是尽快开始在新项目中使用OOP。当您感到舒适时,您可以开始为现有项目考虑OOP设计,并逐步在OOP中实现功能。这将是一个很大的工作,虽然,它可能会觉得像重写整个项目。

    我会寻找其他地方的迹象,你需要切换。对于所有的宣传——我是OOP的大力支持者——OOP语言的代码重用通常只是稍微好一点

    OOP是另一个帮助组织代码的简单工具,就像过去的函数一样。这是一个非常有用的工具。但是主要的好处是使编写和维护代码变得更容易


    如果是我,转向OOP几乎需要完全重写,我会推迟,直到切换带来的更多实质性好处变得明显。如果你的代码有效,我不知道你为什么要重写它。

    这取决于任务,但在完成了这两项任务后,我会这样想:

  • 你觉得这项工作需要模块化吗?从中心位置管理相似或不同事物的能力?有很多重复的元素吗?快速发展或管理变革是否重要

  • 你觉得你所攻击的问题是可预测的和重复的吗?是通过以下步骤来解决问题,还是通过应用算法来解决问题

  • 如果更像1,则使用OOP,否则如果更像2,则使用过程方法


    当有疑问时,使用你喜欢的东西。

    改变正在进行的项目的编程风格很少是一件好事

    如果您希望实体之间有更明确的责任,您可以始终将OO原则应用于过程代码


    例如,检查ANSI-C中的OO编码,OOP不是“唯一的方法”,您仍然可以拥有组织良好的可重用代码,这不是OOP。但实际上,OOP是一种自然语言,它使事情变得更简单。PHP是一种混合语言。如果您只构建过程应用程序或所有面向对象的应用程序,那么您使用的是错误的,很可能会生成不符合标准的API。@马里奥:这很有趣。有关于这方面的阅读材料吗?@JonahBron:这里有一篇客观化的文章:-在这个问题上也有一些有趣的重复-IIRC也有一篇关于程序员的好文章SE@Tortoise:)从那时起,我对OOP的看法发生了重大变化;现在我认为OOP是一种推理程序,而不是编写程序。如果您只是处理10行批处理脚本或类似的脚本,当然,只需使用几行过程代码即可完成任务,但对于您打算使用一段时间的任何内容,其他人可能需要维护的内容,或任何重要的内容(超过100行左右的代码),我想说你最好投资oop。我不确定我是否同意你的观点。我见过许多想要的OO代码按照您描述的方式创建。不幸的是,它并不能让人理解OOP背后的主要原则。主要的一点是理解对象是什么,它能做什么,它不能/不应该做什么,等等