PHP中体现多态的示例

后端 ngxz 5年前 (2019-07-03) 1159次浏览 已收录 扫描二维码

由于最近接触其他语言的多态如何体现问题,想到自己对php的多态还是不够清晰,今天查询各个文章,思考并写了一个简单的例子,在此记录出来。

1.多态定义

面向对象的思想中,多态是指一个函数(操作),对于不同类的实例(对象)的操作,会产生不同的执行结果,即同一个函数,传入不同的参数,执行不同的方法。

使用多态实现类的好处是便于以后扩展,适应需求变化。

2.多态产生条件

类与类之间有继承关系,并且子类重写了父类的方法。

3.代码demo

<?php
/**
 * 人类
 */
class Human {
	public $name;
	public function __construct($name){
		$this->name = $name;
	}
	public function say(){
		echo "i am a human,my name is ".$this->name.".<br/>";
	}
}
/**
 * 男人类
 * 重写父类的say
 */
class Man extends Human{
	public function say(){
		echo "i am a man,my name is ".$this->name.".<br/>";
	}
}
/**
 * 女人类
 * 重写父类的say
 */
class Woman extends Human{
	public function say(){
		echo "i am a woman,my name is ".$this->name.".<br/>";
	}
}

/**
 * 调用的类
 */
class Main{
	public function say($obj){
		// 判断$obj是否是Human的实例
		if ($obj instanceof Human) {
			$obj->say();
		}else{
			echo "obj error.<br/>";
		}
	}
}

$obj = new Main();

$obj1 = new Human('li');
$obj->say($obj1);

$obj2 = new Man('wang');
$obj->say($obj2);

$obj3 = new Woman('zhao');
$obj->say($obj3);

// 运行结果
// i am a human,my name is li.
//i am a man,my name is wang.
//i am a woman,my name is zhao.

版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中体现多态的示例
喜欢 (0)