php语言 百分网手机站

PHP5中实现多态的两种方法实例

时间:2020-08-07 19:43:00 php语言 我要投稿

PHP5中实现多态的两种方法实例

  在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。以下是小编整理的关于在PHP5中多态应用方法,欢迎来阅读!

  我们只能说在PHP5中,多态应用在方法参数的类型提示位置。

  一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。

  所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。

  简单的说,一个类拥有其父类、和已实现接口的身份。

  通过实现接口实现多态

  复制代码 代码如下:

  <?php

  interface User{ // User接口

  public function  getName();

  public function setName($_name);

  }

  class NormalUser implements User { // 实现接口的类.

  private $name;

  public function getName(){

  return $this->name;

  }

  public function setName($_name){

  $this->name = $_name;

  }

  }

  class UserAdmin{ //操作.

  public static function  ChangeUserName(User $_user,$_userName){

  $_user->setName($_userName);

  }

  }

  $normalUser = new NormalUser();

  UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.

  echo $normalUser->getName();

  ?>

  使用接口与组合模拟多继承

  通过组合模拟多重继承。

  在PHP中不支持多重继承,如果我们向使用多个类的方法而实现代码重用有什么办法么?

  那就是组合。在一个类中去将另外一个类设置成属性。

  下面的例子,模拟了多重继承。

  接口实例

  写一个概念性的'例子。 我们设计一个在线销售系统,用户部分设计如下: 将用户分为,NormalUser, VipUser, InnerUser 三种。要求根据用户的不同折扣计算用户购买产品的价格。并要求为以后扩展和维护预留空间。

  复制代码 代码如下:

  <?php

  interface User

  {

  public function getName();

  public function setName($_name);

  public function getDiscount();

  }

  abstract class AbstractUser implements User

  {

  private $name = "";

  protected  $discount = 0;

  protected  $grade = "";