PHP中是否存在多态

2020-12-16  本文已影响0人  lifefruity

多态的含义是:同一类的对象收到相同消息时,会得到不同的结果。而这个消息是不可预测的。多态,顾名思义,就是多种状态,也就是多种结果。

例1

<?php 

class employee{
    protected function working(){
        echo '本方法需要重载';
    }
}

class teacher extends employee{
    public function working(){
        echo '教书';
    }
}

class coder extends employee{
        public function working(){
        echo '写代码';
    }
}

function doprint($obj){
    if(get_class($obj) == 'employee'){
        echo 'Error';
    }else{
        $obj->working();
    }
}

doprint(new teacher());
doprint(new coder());
doprint(new employee());

例2

<?php 

interface employee{
    public function working();
}

class teacher implements employee{
    public function working(){
        echo '教书';
    }
}

class coder implements employee{
        public function working(){
        echo '写代码';
    }
}

function doprint(employee $i){
    $i->working();
}

$a = new teacher;
$b = new coder;
doprint($a);
doprint($b);

例2和例1没多少区别,不过代码中doprint函数的参数是一个接口类型的变量,符合“同一类型,不同结果”这一条件,具有多态性的一般特性,因此是多态
例1中如果把doprint函数的obj参数看做一种类型(把所有弱类型看做一种类型),那也可以认为是多态,否则不是
区别是否是多态的关键在于看对象是否属于同一类型
php中父类和子类看做“继父”和“继子”关系,它们存在继承关系,但是不存在血缘关系。因此子类无法向上转型为父类,从而失去多态最典型的特性

上一篇 下一篇

猜你喜欢

热点阅读