由于最近接触其他语言的多态如何体现问题,想到自己对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.