10

我有一个未使用 PHP 的面向对象功能编写的 web 应用程序的开始。

我真的不知道是否值得回去重写我已经完成的部分。面向对象的 PHP 是否值得重写一个体面的工作应用程序的全部或部分?

4

10 回答 10

20

鉴于您有一个不完整的应用程序,我会说将其重新构建为基于对象的应用程序可能会有所帮助。

要考虑的一件事是最终应用程序的预期大小。在一定的复杂性之下,基于对象可能是矫枉过正,除了学习经验。

我开始避免像瘟疫这样的物体,因为我在大学课堂上最初对它们的介绍很糟糕。我最近不得不从事一个在 php 对象中实现的项目。进行所需的更改比其他项目容易得多。从那以后,我经常在对象模型中工作,发现它非常方便快速创建和更容易维护。

于 2008-09-11T21:24:43.860 回答
12

只是不同意共识......在大多数情况下我会说不。无论如何,这不是商业代码的学术练习。如果它正在工作,请不要重新编写它。如果您必须进行更改/添加位,那么重构面向 OO 实践(在 SO 上有很多关于在您更改代码时进行重构的帖子,而不仅仅是为了它)。

在实践中,如果你没有做过很多 OOP,那么你会想从小处着手,感受一下。

一旦你掌握了基础知识,一本好的设计模式初学者指南(我喜欢 Head First 这本书)就非常有用。大多数 PHP 书籍对 OOP 的教导都很差。他们教你关于继承的知识,但通常不会教你关于松散耦合和偏好组合而不是继承的知识。一本设计模式书将使您更好地了解这一点。

PHP 仍然以没有正确“做”OO 而闻名。我认为这不公平,但这反映了人们在没有真正了解 OOP 的情况下很容易上手的事实。我会冒昧地说大多数(非常轻微 - 称之为 51%)的 PHP 程序员对 OOP 并不满意。我认为在 PHP 中做好的 OO 是可能的,如果你已经对这种语言感到满意,那么这是提高你技能的好方法。

编辑:

只是添加一些免责声明......

  1. 我对大多数PHP 程序员对 OOP 不满意的评论不适用于当前的 SO 受众!
  2. 并不是说您对 OOP 不满意,如果您不满意,这适用
于 2008-09-11T22:41:35.610 回答
4

典型的回答:“视情况而定。”

我倾向于把显示页面写成一个从头到尾,<html> 到</html> 的脚本页面。但是那个页面上发生的事情是对象。有点像穷人的ASP。虽然您可以拥有基于 OOP 的输出,但我一直认为它对于像将数据转储到浏览器这样乏味的任务来说太麻烦了。

因此,业务规则和数据访问是 OOP。演示文稿是脚本。

如果您有不是OOP 的业务规则,我会认真考虑在两​​个条件下将它们写为对象:(1)“您有时间/精力/金钱吗?” (2) 是“你有一个好的 PHP IDE 可以让你的生活更轻松吗?” 如果它有效,并且改变它意味着用 Notepad++ 编写,那么我会称之为完成。:-)

于 2008-09-11T21:03:34.037 回答
2

我不会说这很关键,但如果你打算在应用程序上走得更远,我建议你现在就去做,而这并不是一项艰巨的任务。我想说一个编写良好的 OOP 程序的可维护性可能远远超过前期成本。尤其是当您认为您将能够在进行过程中重构大部分代码时。

于 2008-09-11T20:59:52.077 回答
2

学习面向对象的技术将非常有用,尤其是对于将来用其他语言进行编程。

由于您刚刚启动应用程序,您可以重写和改进您编写的部分。这取决于你的截止日期。

于 2008-09-11T21:02:01.387 回答
1

有两种可能性:要么您的应用程序是一次性的,只需立即运行,永远不会被触及、调整、扩展或修改,或者您的应用程序是您将继续使用和使用的东西的开始很长时间。

如果是前者,请不要破坏完全可用的代码。你的时间有更好的事情要做。

如果是后者,您必须记住关于 PHP 的一个重要事实,那就是:编写不佳的 PHP 是维护的噩梦。 不如写得不好的 Perl 糟糕——因为它是什么?——但已经够糟糕了,迟早你会有强烈的冲动去偷一台时间机器,回到你写代码的那一刻,你现在发现自己在维护,然后用冰锥刺自己的眼窝。

因此,如果您要随着时间的推移维护此代码,请花时间将其做好。这意味着:某种模板系统,没有嵌入 HTML 中的 PHP 标记,用于不同功能的单独文件,以及classes 类 classes

你的眼窝会感谢你的。

于 2008-09-15T12:42:01.600 回答
0

我会说试着去 OO 只是因为如果做得好,你所拥有的东西可以比程序更容易重用

我还要说OO比程序更有组织。当您的规模很小时,很容易摆脱草率的代码 OO 与否。但是当你处理更大的项目时,你的程序必须更有条理和深思熟虑。在一些较大的项目中,OO 往往会迫使您更有条理,使事情变得更容易。

于 2008-09-12T05:45:38.867 回答
0

不,我认为如果应用程序正常工作,则无需重写它。PHP 根本不是真正的 OOP。他们很努力,但有时我认为即使是 PHP 开发人员也并不真正理解 OOP 的意义。如果您想学习 OOP(这肯定是一个好主意),请尝试使用真正的 OOP 语言(如 Smalltalk)来学习基本概念。Java 也不错 2 学习基础知识,虽然它也不是完全面向对象的

于 2008-09-15T12:30:54.343 回答
0

我想在这里重申其他答案。这取决于应用程序的大小以及您想了解多少有关 OOP 的知识。不过,我会小心使用 PHP 来学习 OOP。

至于 PHP 有多少面向对象的…… PHP4 有一些 OOP 元素,PHP5 更好,但它没有融入语言。PHP 可以双向工作,我个人喜欢你可以选择。

于 2008-09-15T12:47:33.273 回答
0

在我看来,我们phper可以彻底抛弃Object(类实例)的概念,我们只需要Array和Mode Class:

初始模式下的所有数组都支持任何数组函数,因为它的方法:

<?php
$array1->array_flip(this);
?>

用于->mode()验证最小数据集,然后切换模式类:

<?php
$array1->mode('class1', $success);
?>

任何模式类都没有->construct(),但必须->validate()验证最小数据集。

一个模式下的数组仍然可以使用数组函数作为它的方法,但是使用其中任何一个后数组都会切换回基本数组模式,我们需要使用->mode('class1', $success);来切换模式。

激进的思想是以数据为中心的编程,我们需要将数据(数组)和活动(类方法)分开。

我们可以修改PHP引擎,去掉部分OO(面向对象),支持Mode Class,我们可以称之为MyPHP。

例如: $array_man1可以设置为两种模式:cls_normal_mancls_crazy_man

<?php
$array_man1->mode('cls_normal_man')->normal_method1()->mode('cls_crazy_man')->crazy_method1();
?>
于 2011-09-02T05:16:19.207 回答