为什么在基本函数上使用 PHP OOP 以及何时使用?
有一些关于此事的帖子,但我没有清楚地知道何时使用面向对象编码以及何时在包含中使用编程函数。有人还向我提到,OOP运行起来非常繁重,并且会产生更多的工作量。这是对的吗?
假设我有一个包含50个函数的大文件。为什么我要在课堂上调用这些?而不是通过function_name()?我应该切换并创建一个包含我所有功能的对象吗?优势或具体区别是什么?它为PHP中的OOP代码带来了什么好处?模块性?
有一些关于此事的帖子,但我没有清楚地知道何时使用面向对象编码以及何时在包含中使用编程函数。有人还向我提到,OOP运行起来非常繁重,并且会产生更多的工作量。这是对的吗?
假设我有一个包含50个函数的大文件。为什么我要在课堂上调用这些?而不是通过function_name()?我应该切换并创建一个包含我所有功能的对象吗?优势或具体区别是什么?它为PHP中的OOP代码带来了什么好处?模块性?
在很多情况下,过程编程都很好。为了使用它而使用OO是没有用的,特别是如果你最终要得到POD对象(普通的旧数据)。
OO的强大功能主要来自遗传和多态性。如果您使用类,但从未使用这两个概念中的任何一个,则可能首先不需要使用类。
OO闪耀的IMO最好的地方之一是允许您摆脱开关类型代码。考虑:
function drive($the_car){
switch($the_car){
case 'ferrari':
$all_cars->run_ferrari_code();
break;
case 'mazerati':
$all_cars->run_mazerati_code();
break;
case 'bentley':
$all_cars->run_bentley_code();
break;
}
}
使用其 OO 替代方案:
function drive($the_car){
$the_car->drive();
}
多态性将允许基于运行时信息发生适当类型的“驾驶”。
关于多态性的注意事项:
这里的第二个例子有一些前提条件:即所有汽车类都将扩展抽象类或实现接口。
两者都允许您强制扩展或实现类以定义特定函数,例如 。这是非常强大的,因为它允许您使用所有汽车,而无需知道您正在驾驶哪一辆汽车;这是因为他们正在扩展包含该方法的抽象类或实现强制定义该方法的接口。drive()
drive()
drive()
drive()
因此,只要您确保所有特定的汽车都扩展了抽象类或实现了诸如(两者都必须声明方法)之类的接口,您就可以在您知道是汽车(但不是什么类型的汽车)的对象上调用该方法,而不必担心它没有被定义, 因为PHP会向你抛出致命的错误,直到你在特定的汽车类中定义这些方法。car
canBeDriven
drive()
drive()
我会尽量保留我的答案作为补充,因为Majd Taby和Coobird的答案真的很好。
几年来,我主要是一名程序程序员,没有与OOP编程作斗争,但从未真正看到太多的相关性......直到我开始在团队中工作并构建更重要和更复杂的项目。
在我看来,当你需要为更复杂的应用程序编写精益、易于维护的代码时,OOP真的很闪耀。请注意,并非在每种情况下,但有些情况下程序性并不能很好地发挥作用。
我的大多数优秀OOP实现的例子都是针对我的项目,在这些项目中,我有几件事都是相关的,但都略有不同。具有大量表单,大量用户,大量产品等的网站。
它们都有类似的行为名称,如print(),update()等...但是通过将它们封装为对象并改变类中的方法实现,我可以使运行时的代码在整个站点中变得非常简单和干净。另外,这个是关键,尽管具有不同的行为,但我可以在整个应用程序中使用相同的方法调用来处理不同的对象。它允许第二个开发人员在我处理更深入的代码时处理实际实现。
我不知道这是否有任何帮助,但作为不久前处于你境地的人,我喜欢OOP。