面向对象编程中的继承
OOP 中的继承是一个对象可以获取另一个对象的方法和属性的概念。
继承可以帮助开发人员重复使用相关对象的函数。您可能听说过 "不要重复"(DRY)原则;继承可以帮助您减少代码的编写和重复,从而帮助您重复使用代码。
诸如 Cavoodle
和 Dog
这样的对象是相关的—我们知道 Cavoodle
是 Dog
的一种类型。为 Dog
和 Cavoodle
提供的函数应该侧重于 Dog
和 Cavoodle
应该能做的事情。例如,如果你有一个 Dog
对象,而它有一个 computeTax
函数,那么这个函数就与 Dog
对象无关,你可能做错了什么—它的内聚性很低。高内聚意味着你的类专注于做你的类真正应该做的事情。有了高内聚性,就更容易决定一个对象是否应该成为一个可以继承的对象,就像 Dog
和 Cavoodle
对象一样。如果 Cavoodle
类扩展了 JetEngine
类,那就说不通了,但 Cavoodle
类扩展 Dog
类就完全说得通了:
Cavoodle.php
<?php
namespace Animal\Dogs;
use Animal\Dog;
class Cavoodle extends Dog
{
public function __construct()
{
parent::__construct();
// Using the protected method from the Dog class.
$this->setColor("Chocolate");
}
}
要在使用者类中使用 Cavoodle
类的方法,请创建 Cavoodle
类的新实例:
public function sayHelloCavoodle()
{
$cavoodle = new Cavoodle();
$cavoodle->setSound("Bark Bark!");
// Will output Hello Bark Bark!!, my color is: Chocolate
$cavoodle->makeSound();
}
Cavoodle
对象使用 extends
关键字继承了 Dog
对象。这意味着 Dog
的任何公共或保护函数现在都可以为 Cavoodle
对象所用。你会发现 Cavoodle.php
类中并没有声明 makeSound
函数,但我们仍然可以使用 $cavoodle→makeSound();
方法,这是因为 Cavoodle
对象继承了 Dog
对象的 makeSound
函数。