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