作者:小石头 | 来源:互联网 | 2018-03-23 22:41
多态是指在面向对象中能够根据使用类的上下文来重新定义或改变类的性质和行为。
PHP不支持重载实现多态,但是PHP可以变向的实现多态效果。如下:
class a{ function test($i){ // $i可以是任何类型的变量
print_r $i;
}
}
上例,可以看出由于PHP是弱类型语言,所以$i可以是任何类型的变量,这样一个函数就可以实现如java等强类型语言中靠改变参数类型重载方法的多态形式。
这种形式比JAVA的参数类型重载更便捷高效,但也存在问题,如下:
draw();
}
}class Polygon{ function draw(){ echo "draw a polygon";
}
}class Circle{ function draw(){ echo "draw a circle";
}
}?>
可以看出这样灵活的多态,需要一些控制,在PHP5.3以后可以对参数做类型限制,如下:
// 仿java,在变量参数前加一个限制类名
function drawPolygon(Polygon $polygon){
$polygon->draw();
}
这样就限制了只能传入Polygon及其子类。
还有一只是改变参数数量的重载,同样是因为PHP也不支持方法的重载,所以也需要些变通的方法实现,如下: