美文网首页
PHP中是否存在多态

PHP中是否存在多态

作者: lifefruity | 来源:发表于2020-12-16 13:34 被阅读0次

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

例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中父类和子类看做“继父”和“继子”关系,它们存在继承关系,但是不存在血缘关系。因此子类无法向上转型为父类,从而失去多态最典型的特性

相关文章

网友评论

      本文标题:PHP中是否存在多态

      本文链接:https://www.haomeiwen.com/subject/sovngktx.html