php 多态的理解
Posted ▍凉城空巷°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 多态的理解相关的知识,希望对你有一定的参考价值。
php是面向对象的脚本语言,而我们都知道,面向对象的语言具有三大特性:封装,继承,多态。php理应具有这三大特性。
封装是类的构建过程,php具有;php也具有继承的特性。唯独这个多态,php体现的十分模糊。原因是php是弱类型语言。
java的多态体现的十分清晰,大体分两类:父类引用指向子类对象;接口引用指向实现接口的类对象。java声明变量时都要给变量设定类型,所以存在什么父类引用和接口引用。而php则没有这点体现,php声明变量不需要给变量设定类型,一个变量可以指向不同的数据类型。所以,php不具有像java一样的多态。
php不具有像java那种清晰的多态,不是代表php不具有多态性。看下面一个例子:
1 abstract class animal{
2 abstract function fun();
3 }
4 class cat extends animal{
5 function fun(){
6 echo "cat say miaomiao...";
7 }
8 }
9 class dog extends animal{
10 function fun(){
11 echo "dog say wangwang...";
12 }
13 }
14 function work($obj){
15 if($obj instanceof animal){
16 $obj -> fun();
17 }else{
18 echo "no function";
19 }
20 }
21 work(new dog());
22 work(new cat());
上面通过一个关键字instanceof来判断,变量指向的对象是否是animal类的一个实例,下面new cat(),new dog()都是animal子类的对象,而输出了“dog say wangwang...”和“cat say miaomiao...”,说明子类对象是父类的一个实例,从而达到了java多态的功能。
上边的类是抽象类,也表明了接口与实现接口的类对象同样可以适用。
至此,得出php虽然多态体现模糊,但还是具有多态特性的。
如果不曾相逢,心绪不会如此沉重
以上是关于php 多态的理解的主要内容,如果未能解决你的问题,请参考以下文章