我正在努力学习如何在PHP中最好地使用OOP.请注意,即使我研究了这个新"世界"的理论,我也没有明显地进入OOP思考.
使用普通的,分离的函数并将它们作为方法放在类中有什么区别?
假设我有一个名为"商店"的课程.
它有以下方法:retrieveitems,deleteitems,updateitems,additems
除了我可以使用简单的"$ this"调用方法内部的方法之外,在没有类的情况下将它们放在不同的函数之间有什么区别?我的意思是,例如,我仍然可以在函数retrieveitems中调用函数deleteitems吗?即使不上课?
请帮助我理解我所缺少的.
Nul*_*ion 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]);
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以创建实例:
$computerShop = new Shop(array('ram', 'monitor', 'cpu', 'water'));
$hardwareStore = new Shop(array('hammer', 'screwdriver', 'water'));
Run Code Online (Sandbox Code Playgroud)
而且他们每个人都是相互独立的.如果我这样做$computerShop->removeItem('water')
,$hardwareStore
应该还有water
他们的inventory
.(看它在行动)这样做的程序方式更加混乱.
关于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!';
}
}
Run Code Online (Sandbox Code Playgroud)
现在两个Cat
和Dog
s都可以调用该方法,eat()
即使它们没有在它们的类中显式声明 - 它已经从它们的父类继承Animal
.他们也有一种speak()
做不同事情的方法.挺整洁的,对吧?