php面向对象特性四

 多态

抽象类和接口都可以实现多态
多态是指OOP能够根据类的上下文来重新定义或改变类的性质或行为,或者说接口的多种不同的实现方式即为多态。把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适用需求的不断变化。
什么叫做多态,字面意思,多种形态
一个动作由不同的人去执行,而产生不同的效果或结果,即为多态
一个人通过不同的状态,去执行同一种动作,形成不同的结果,也可以称作为多态。
对比
// 园丁          剪             修理花草
// 理发师        剪             理发
// 总裁          剪             裁员

// 张三 笔记本 运行 win7开机了 // 张三 台式机 运行 win8开机了

 下面的例子是以张三对不同电脑的相同动作,形成不同结果的实现

// 定义电脑接口类
interface Computer{
    // 定义电脑版本方法
    public function version();
    // 定义电脑工作
    public function work();
}
// 定义笔记本类
class NoteComputer implements Computer{
    // 笔记本类实现版本方法
    public function version(){
        echo "笔记本DELL";
    }
    // 笔记本类工作
    public function work(){
        echo "启动了win7系统";
    }
}
//定义台式机类
class DeskTopComputer implements Computer{
    // 台式机类版本
    public function version(){
        echo "台式机华硕";
    }
    // 台式机类工作
    public function work(){
        echo "启动了win8系统";
    }
}
// 定义一个人的类
class Person{
    private $_name="张三";
    public function __construct()
    {
        echo "<meta charset=utf8>";
    }
    // 这个_run方法会持有对象的引用,对象引用可以通过使用接口定义的函数,实现不同功能
    // 也就是实现了
    /*
     *  // 张三         笔记本         运行         win7开机了
        // 张三         台式机         运行         win8开机了
     * */
    public function _run($type){
        echo $this->_name;
        $type->version();
        $type->work();
    }
}
// 多态的原理,就是把类都写好了,不要去修改他,只要在类外的调用参数的更改
// 而最后的结果也会得到更改,那么这个就是多态
//创建一个笔记本
$noteComputer = new NoteComputer(); //创建一个台式机 $deskTopComputer = new DeskTopComputer(); //创建一个人 $person = new Person(); // 这种传递对象的方式,叫做对象引用的传递,也叫持有对象引用 $person->_run($deskTopComputer);
// 这是很重要的内容
//多态的原理,就是类都写好了,不要去修改它,只要在类外调用参数的更改 // 而最后的结果也会得到更改,那么这个就是多态
原文地址:https://www.cnblogs.com/anyux/p/8257136.html