当前位置: 首页 > 编程笔记 >

解释PHP中的多态性。

公羊宗清
2023-03-14
本文向大家介绍解释PHP中的多态性。,包括了解释PHP中的多态性。的使用技巧和注意事项,需要的朋友参考一下

首先,多态是从希腊语Poly(表示很多)和morphism(表示形式)中获得的。

多态描绘了面向对象编程中的一个示例,在该示例中,具有相似功能的各个类中的方法应具有相似的名称。多态本质上是一种OOP模式,它使具有不同功能的多个类可以执行或共享commonInterface。多态性的用处在于,用不同的类编写的代码不会影响该类所属的类,因为它们以相同的方式使用。为了确保这些类确实实现了多态性准则,我们可以在抽象类或接口的两种选择之一之间进行选择。

因此,让我们在接口的帮助下实现多态原则。

接口接口类似于类,但接口不能包含代码。接口可以定义方法名称和参数,但不能定义方法的内容。任何执行接口的类都必须执行该接口所表征的所有方法。

例:

<?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()内部带有相应主体的方法来实现接口。矩形类还实现了Machine接口,但定义的方法calcTask()的主体与圆形类的CalTask()方法不同。多态性准则指出,对于这种情况,所有用于计算任务的方法都具有相同的名称。现在,无论何时需要为不同的类计算Task,我们都将调用名称为calcTask()无需过多考虑如何为另一台计算机实际计算任务的细节。我们需要知道的主要事情是计算Task的方法的名称。

 类似资料:
  • ...并且这些关系对于具体类型(如)是正确的,而对于多态类型(如)则相反。我还知道如何将具有多态类型的类型签名转换为它们的具体类型表示,只需根据以下同构翻译Church编码: 所以如果我有: 我知道它并不意味着,但它实际上意味着:

  • 本文向大家介绍解释PHP中的array_merge()函数。,包括了解释PHP中的array_merge()函数。的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将学习array_merge(),这是一个预定义的PHP数组函数。array_merge()用于将至少两个以上的数组组合为一个数组。利用该功能将至少两个数组的组件组合在一起成为一个数组。 此函数以一种方式将一个或多个数组的元素合并

  • 本文向大家介绍PHP中imagick函数的中文解释,包括了PHP中imagick函数的中文解释的使用技巧和注意事项,需要的朋友参考一下 imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像  imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角  imagick的:: adaptiveSharpenImage - 自适应锐化

  • 问题内容: 我想我一直在考虑针对以下问题的多态解决方案: 假设我有一个with字段用于交易。现在,我有两种特殊的交易类型:和。 目前只有的组成。 由和组成。 我还有一个函数,该函数在字段上具有一些逻辑,但最后是使用并保存某处序列化整个对象。 https://play.golang.org/p/0Vu_YXktRIk 我试图弄清楚如何实现在两种事务上都可以使用的结构和功能,但是最后正确地序列化了这两

  • 本文向大家介绍用实例解释Python中的继承和多态的概念,包括了用实例解释Python中的继承和多态的概念的使用技巧和注意事项,需要的朋友参考一下 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为An

  • 由于在这个so线程上遇到了困难,我决定用PHP编写类似的测试。我的测试代码是这样的: 在PHP版本中运行与非常相似, 因此PHP解释器没有像Java中的JVM那样优化字节码 即使在我手动优化代码的时候--我也有~的加速比,而Java的版本有~的加速比。所以PHP版本的加速系数是Java代码的1/2。 我不想多说细节,但优化和未优化代码的乘法比是-> 1求和:3/4 2求和:4/6 3求和:5/8