我正在努力学习如何在PHP中最好地使用OOP。请注意,即使我研究了这个新“世界”的理论,我也没有明确地进入OOP思考。
使用普通的,分离的函数并将它们作为方法放在类中有什么区别?
假设我有一个名为“商店”的课程。
它有以下方法:retrieveitems,deleteitems,updateitems,additems
除了我可以使用简单的“$ this”调用方法内部的方法之外,将它们放在不同类的不同函数之间有什么区别?我的意思是,例如,我仍然可以在函数retrieveitems中调用函数deleteitems吗?即使不上课?
请帮助我理解我所缺少的内容。
答案 0 :(得分:11)
OOP除其他外还提供封装。
class Shop {
function __construct($items) {
$this->inventory = $items;
}
function deleteItem($item) {
$key = array_search($item, $this->inventory);
if ($key !== false)
unset($this->inventory[$key]);
}
}
现在您可以创建实例:
$computerShop = new Shop(array('ram', 'monitor', 'cpu', 'water'));
$hardwareStore = new Shop(array('hammer', 'screwdriver', 'water'));
他们每个人都是彼此独立的。如果我$computerShop->removeItem('water')
,$hardwareStore
water
仍应inventory
。 (see it in action)这样做的程序方法更加混乱。
关于OOP的另一个好处是你可以使用继承和多态:
class Animal {
function eat() {
$this->hungry = false;
}
abstract function speak();
}
class Cat extends Animal {
function speak() {
echo 'meow!';
}
}
class Dog extends Animal {
function speak() {
echo 'woof!';
}
}
现在,Cat
和Dog
都可以调用方法eat()
,即使它们没有在类中显式声明 - 它们也是从父类Animal
继承的。他们还有speak()
方法可以做不同的事情。很整洁,呵呵?
Object-oriented programming,Encapsulation,Inheritance,Polymorphism
答案 1 :(得分:4)
我喜欢的关于类的最有趣的功能之一是封装。您可以将各种函数链封装到一个主函数中并直接调用它们。封装创建了一个环境,您可以在其中保护成员对象和属性不被类修改。
类的另一个主要部分是组。能够将与特定对象相关的所有功能和属性组合在一起,以及将该类的不同实例作为对象的能力,简直是神奇的。假设你有一堆相互引用的函数,并传递几乎相同的参数。这是一个好的迹象,表明这些函数属于一个类,而这些参数应该是该类的成员。
由于您使用的是PHP,想象一下您创建了一个创建面板的类。现在,您可以使用此类创建不同但相似的布局,例如新闻面板,广告面板,产品展示面板,通过创建它的不同对象,以及提供内容。
您可能会说使用函数也可以这样做,但函数无法提供类提供的可伸缩性和灵活性。
<强>继承强>
这是OOP的主要功能之一,您可以创建无限级别的父类和子类。例如,您已创建了一个类car
。这个类有像轮子,齿轮,转向这样的属性有像drive(),stop()这样的方法,但你不能陪伴这个世界上的每辆车,所以现在你将创建它的子类。在这种情况下,子类可以是2WD和4WD,并且这些子类也可以具有具有新成员和方法的其他子类。但是你可以访问其成员和功能,一直到其父母和祖父母。
<强>多态性强>
这表示能够覆盖父类中的函数。即简单汽车的驱动系统与4WD汽车的驱动系统不同,因此您需要覆盖以前的父功能并用新功能替换它。
另一种是重载,它能够在不同的参数情况下使用函数。例如,对于一辆简单的汽车来说,它需要发动机启动,齿轮和加速,但对于像法拉利这样的现代汽车,你只需要启动发动机并按下油门,你就不需要齿轮,所以对于这两种情况依次要使用方法drive(),您提供不同的参数。并且类使它成为可能。(但这个功能在PHP中不可用:()
答案 2 :(得分:3)
请注意,OOP是关于对象的90%,关于类和接口的10%。这就是我们称之为 object 面向编程的原因。
我认为你的问题太笼统了。有很多关于OOP的文章在互联网上(你不仅限于PHP文章--OOP是一个范例,所以你可以阅读有关Java等的文章。)
面向对象编程(OOP)是一种编程范例,它使用“对象” - 由数据字段和方法及其交互组成的数据结构 - 来设计应用程序和计算机程序。编程技术可能包括数据抽象,封装,模块化,多态和继承等功能。
阅读更多关于该引文的重要内容。
答案 3 :(得分:1)
我喜欢OOP有一个原因。对象。想想篮球比赛。 每个玩家都是一个对象。他们都有人类,每个人都有不同的个人技能和属性。如果我打算编写一个篮球比赛,它将变成没有OOP的意大利面条代码。使用OOP,我可以产生个体并命名它们:
丹很高,比尔很快。$dan = new Human(Tall->increaseHeight());
$bill = new Human(Fast->increaseSpeed());
没有OOP让一群人相互竞争并追踪他们的属性将是一团糟。我不太了解OOP,但组织是喜欢它的一个原因。
答案 4 :(得分:0)
如果没有一个类,你仍然需要一个结构来保存你要添加,更新和删除的项目集(由于你已经拥有项目,检索会消失)。 / p>
答案 5 :(得分:0)
您的问题涉及更广泛的PHP,您在询问有关OOP基础知识的问题。我建议您仍然对main features of OOP programming进行基本阅读。
答案 6 :(得分:0)
主要区别在于范围。以下是关于差异的精彩视频(即使是计算机语音):http://www.youtube.com/watch?v=D8jZ0l_GwXQ&feature=related