PHP中的对象继承

57 阅读1分钟

当我们允许类继承其他类的属性和方法时,面向对象编程中的乐趣就开始了。

假设你有一个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 属性和方法可以从类的内部和子类中访问。