【发布时间】:2010-09-08 15:04:40
【问题描述】:
我有一个未使用 PHP 的面向对象特性编写的 web 应用程序的开始。
我真的不知道是否值得回去重写我已经完成的部分。面向对象的 PHP 是否值得重写一个体面的工作应用程序的全部或部分?
【问题讨论】:
标签: php oop web-applications
我有一个未使用 PHP 的面向对象特性编写的 web 应用程序的开始。
我真的不知道是否值得回去重写我已经完成的部分。面向对象的 PHP 是否值得重写一个体面的工作应用程序的全部或部分?
【问题讨论】:
标签: php oop web-applications
我不会说这很重要,但如果您打算在应用程序上走得更远,我建议您现在就开始,虽然这不是一项艰巨的任务。我想说一个编写良好的 OOP 程序的可维护性可能远远超过前期成本。尤其是当您认为您将能够在进行过程中重构大部分代码时。
【讨论】:
学习面向对象的技术将非常有用,尤其是对于将来用其他语言进行编程。
由于您刚刚启动应用程序,您可以重写和改进您编写的部分。这取决于您的截止日期。
【讨论】:
典型答案:“视情况而定。”
我倾向于把显示页面写成一个从头到尾的,到的脚本页面。但是那个页面上发生的事情是对象。有点像穷人的ASP。虽然您可以拥有基于 OOP 的输出,但我一直认为这对于像将数据转储到浏览器这样乏味的任务来说太麻烦了。
因此,业务规则和数据访问是 OOP。演示文稿是脚本。
如果您有非 OOP 的业务规则,我会认真考虑在两个条件下将它们写为对象:(1) 是“您有时间/精力/金钱吗?” (2) 是“你有一个好的 PHP IDE 可以让你的生活更轻松吗?”如果它有效,并且改变它意味着用 Notepad++ 编写,那么我会称之为完成。 :-)
【讨论】:
鉴于您有一个不完整的应用程序,我会说将其重新构建为基于对象的应用程序可能会有所帮助。
要考虑的一件事是最终应用程序的预期大小。低于一定的复杂度,除了学习经验之外,基于对象可能是多余的。
我开始避免像瘟疫这样的物体,因为我在大学课堂上最初对它们的介绍很糟糕。我最近不得不从事一个在 php 对象中实现的项目。进行所需的更改比其他项目容易得多。从那以后,我经常使用对象模型,发现它非常方便快速创建和更容易维护。
【讨论】:
只是不同意共识...在大多数情况下我会拒绝。无论如何,这不是商业代码的学术练习。如果它正在工作,请不要重新编写它。如果您必须进行更改/添加位,那么重构面向 OO 实践(在 SO 上有很多关于在您更改代码时进行重构的帖子,而不仅仅是为了它)。
在实践中,如果您没有做过很多 OOP,那么您会希望从小事做起,感受一下。
一旦您掌握了基础知识,一本很好的设计模式初学者指南(我喜欢 Head First 这本书)就非常有用。大多数 PHP 书籍对 OOP 的教导都很差。他们教你关于继承的知识,但通常不会教你关于松散耦合和偏好组合而不是继承的知识。一本设计模式书将使您更好地了解这一点。
PHP 仍然以没有正确“做”OO 而闻名。我不认为这是公平的,但它反映了人们在没有真正了解 OOP 的情况下很容易上手的事实。我会冒昧地说大多数(非常轻微——称之为 51%)的 PHP 程序员对 OOP 并不满意。我认为用 PHP 做好 OO 是可能的,如果你已经熟悉这门语言,这是提高技能的好方法。
编辑:
只是添加一些免责声明...
【讨论】:
我会说尝试使用 OO 只是因为你拥有的东西可以比程序更容易重用 如果做得好
我还要说 OO 比程序更有条理。当你的规模很小时,很容易摆脱草率的代码 OO 与否。但是当你处理更大的项目时,你的程序必须更有条理和深思熟虑。而在一些大型项目中,OO 往往会迫使您更有条理,让事情变得更容易。
【讨论】:
不,我认为如果应用程序正常运行,则无需重写。 PHP 根本不是真正的 OOP。他们很努力,但有时我认为即使是 PHP 开发人员也并不真正理解 OOP 的意义。 如果您想学习 OOP(这肯定是一个好主意),请尝试使用真正的 OOP 语言(如 Smalltalk)来学习基本概念。 Java 也不错 2 学习基础,虽然它也不是完全面向对象的
【讨论】:
有两种可能性:要么您的应用是一次性的,只需立即运行,永远不会被触及、改编、扩展或修改,否则您的应用是您将长期使用和使用的东西。
如果是前者,请不要破坏完全可用的代码。你有更好的事情可以利用你的时间。
如果是后者,你必须记住关于 PHP 的一个重要事实,那就是:写得不好的 PHP 是维护的噩梦。 不如写得不好的 Perl 糟糕——因为什么是? ——但已经够糟糕了,迟早你会有强烈的冲动去偷一台时间机器,回到你写代码的那一刻,你现在发现自己在维护,然后用冰锥刺自己的眼窝。
因此,如果您要随着时间的推移维护此代码,请花时间将其做好。这意味着:某种模板系统,没有嵌入 HTML 中的 PHP 标记,用于不同功能的单独文件,以及 classes classes 类!
你的眼窝会感谢你的。
【讨论】:
我想在这里重申其他答案。这取决于应用程序的大小以及您想了解多少有关 OOP 的知识。不过,我会小心使用 PHP 来学习 OOP。
至于PHP 是 面向对象的程度... PHP4 有一些OOP 元素,PHP5 更好,但它没有融入语言。 PHP 可以双向工作,我个人喜欢你可以选择。
【讨论】:
在我看来,我们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_man和cls_crazy_man:
<?php
$array_man1->mode('cls_normal_man')->normal_method1()->mode('cls_crazy_man')->crazy_method1();
?>
【讨论】: