面向对象第三大特性:多态
概念: 当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用取调用相应方法时表现出的不同
条件: 1.必须有继承
2.子类必须对父类的方法进行重写
多态在弱类型语言中表现不明显,在强类型语言中表现比较明显,在php中不用考虑.
class Ren { public $name; public $sex; function say() { echo "hello"; } } class China extends Ren { function say() { echo "你好"; } } $r =new Ren(); $r1 =new China();
多态在强类型语言中可用父类引用指向子类的实例,php不用规定变量的类型,多态不明显.
函数重载:
1.方法名必须一样
2.函数里面参数个数不同
3.如果参数个数相同,类型不同
函数重载只在强类型语言中有,弱类型语言中没有
php是弱类型语言,php有可变参数的函数,且不用规定参数类型,不满足函数重载的条件.
function say() { echo "hello"; } function say($a) { echo $a."hello"; } function say($a,$b) { echo $a.$b."hello"; }
三个say()方法,随参数个数不同,调用的函数也不同.
__tostring()方法: 输出类的一些描述
function __tostring() { return "这个对象包含变量name和sex,一个say方法"; } $r= new Ren(); echo $r; //输出return值
对象的克隆:
$r=new Ren(); $r->name="张三"; $r1 =clone $r; //克隆对象 var_dump($r1); //在克隆时,想要对克隆的新对象中添加一些特殊的东西,需要在Ren类中加入__clone方法 function __clone() { $this->name="李四"; //$this是复本(克隆之后的新对象) } echo $r->name; echo $r1->name; //输出:张三李四