当我们允许类继承其他类的属性和方法时,面向对象编程中的乐趣就开始了。
假设你有一个Animal 类。
每个动物都有一个年龄,每个动物都能吃。所以我们添加一个age 属性和一个eat() 方法:
class Animal {
public $age;
public function eat() {
echo 'the animal is eating';
}
}
狗也是一种动物,也有年龄,也能吃东西,所以Dog 类可以扩展该类,而不是重新实现我们在Animal 中的同样东西:
class Dog extends Animal {
}
我们现在可以实例化一个新的Dog 类的对象,我们可以访问Animal 中定义的属性和方法:
$roger = new Dog();
$roger->eat();
在这种情况下,我们称Dog为子类,Animal为父类。
在子类中,我们可以使用$this 来引用父类中定义的任何属性或方法,就像它们被定义在子类中一样。
值得注意的是,虽然我们可以从子类中访问父类的属性和方法,但我们不能反过来做。
父类对子类一无所知。
如果我们在Animal 中有一个eat() 方法,而我们想在Dog 中对其进行自定义,会发生什么?我们可以重写那个方法:
class Animal {
public $age;
public function eat() {
echo 'the animal is eating';
}
}
class Dog extends Animal {
public function eat() {
echo 'the dog is eating';
}
}
现在Dog 的任何实例都将使用Dog's 实现的eat() 方法。
现在我们介绍了继承性,我们可以讨论protected 。我们已经看到了如何使用public 访问修饰符来设置可从类外调用的属性和方法,即公共的。
private 属性和方法只能从类的内部访问。
protected 属性和方法可以从类的内部和子类中访问。