在PHP中使用普通函数和类方法有什么区别?

San*_*cci 6 php oop

我正在努力学习如何在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)

现在两个CatDogs都可以调用该方法,eat()即使它们没有在它们的类中显式声明 - 它已经从它们的父类继承Animal.他们也有一种speak()做不同事情的方法.挺整洁的,对吧?

维基百科:

面向对象编程,封装,继承,多态