解释 PHP 中的多态性。
phpprogrammingserver side programming
首先,多态性来自希腊语单词 Poly(意为许多)和 morphism(意为形式)。
多态性描绘了面向对象编程中的一个例子,其中执行类似操作的各种类中的方法应该具有类似的名称。多态性本质上是一种 OOP 模式,它允许具有不同功能的众多类执行或共享一个公共接口。多态性的用处在于,用不同的类编写的代码不会影响它属于哪个类,因为它们以相同的方式使用。为了确保类确实实现了多态性准则,我们可以在抽象类或接口这两个替代方案之间进行选择。
因此,让我们借助接口来实现多态性原则。
接口 接口类似于类,只是它不能包含代码。接口可以定义方法名称和参数,但不能定义方法的内容。任何执行接口的类都必须执行该接口所表征的所有方法。
示例:
<?php interface Machine { public function calcTask(); } class Circle implements Machine { private $radius; public function __construct($radius){ $this -> radius = $radius; } public function calcTask(){ return $this -> radius * $this -> radius * pi(); } } class Rectangle implements Machine { private $width; private $height; public function __construct($width, $height){ $this -> width = $width; $this -> height = $height; } public function calcTask(){ return $this -> width * $this -> height; } } $mycirc = new Circle(3); $myrect = new Rectangle(3,4); echo $mycirc->calcTask(); echo $myrect->calcTask(); ?>
输出:
28.274 12
解释:
名为"Machine"的接口要求实现它的所有类定义一个名为 calcTask() 的抽象方法。相应地,Circle 类通过定义 callTask() 方法及其内部的相应主体来实现该接口。rectangle 类也实现了 Machine 接口,但定义了 calcTask() 方法,其主体与 circle 类的 CalTask() 方法不同。多态性指南指出,在这种情况下,计算任务的所有方法都具有相同的名称。现在,无论何时我们需要为不同的类计算任务,我们都会调用一个名为 calcTask() 的方法,而无需过多考虑如何为不同的 Machine 实际计算任务的细节。我们需要知道的主要内容是计算任务的方法的名称。