解释 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 实际计算任务的细节。我们需要知道的主要内容是计算任务的方法的名称。


相关文章