8.0 多态
在设计一个成员方法时,通常希望该方法具备一定的通用性。例如要实现一个动物叫的方法,由于每个动物的叫声是不同的,因此可以在方法中接收-个动物类型的参数的对象当传人猫类对象时就发出猫类的叫声,传人犬类对象时就发出犬类的叫声,这种向方法中传人不同的对象,方法执行效果各异的现象就是多态。为了让读者更好地拿握多态的用法,接下来通过一个案例来学习,如例8-22所示。
例8-22
1 <?php 2 //定义Animal接口 3 abstract class Animal{ 4 public abstract function shout(); 5 } 6 //定义Dog类,实现了Animal接口 7 class Dog extends Animal{ 8 public function shout(){ 9 echo "汪汪……<br>"; 10 } 11 } 12 //定义Cat类,实现了Animal接口 13 class Cat extends Animal{ 14 public function shout(){ 15 echo "喵喵……<br>"; 16 } 17 } 18 function AnimalShout($obj){ 19 if($obj instanceof Animal){ 20 $obj->shout(); 21 }else{ 22 echo "Error: 对象错误!"; 23 } 24 } 25 $cat=new Cat(); 26 $dog=new Dog(); 27 AnimalShout($cat); 28 AnimalShout($dog); 29 ?>
运行结果
在例8-22中通过向Amimaltou方法中传人不同的对象,AnimalShout法打印出不同动物的叫声, 由此可见,多态使程序变得更加灵活,有效的提高了程序的扩展性。