一、前情引入
面向对象语言的三大特性:封装、继承、多态
- 封装是类的构建过程,php具有;
- php也具有继承的特性。
- 由于php是弱类型语言,因此多态体现地十分模糊。
定义:多态是指在面向对象中能够根据使用类的上下文来重新定义或改变类的性质和行为。
二、php多态
举例说明:
<?php
/**
教师类有一个drawPolygon()方法需要一个Polygon类,用来画多边形,此方法内部调用多边形的draw()方法,
但由于弱类型,我们可以传入Circle类,就会调用Circle类的draw方法,这就事与愿违了。
甚至可以传入阿猫、阿狗类,如果这些类没有draw()方法还会报错。
*/
class Teacher{
function drawPolygon($polygon){
$polygon->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();
}