主页 > 知识库 > 网络编程 > PHP >

PHP

php使用接口(interface)实现多重继承

来源:中国IT实验室 作者:佚名 发表于:2012-12-03 13:21  点击:
php中使用接口(interface)实现多重继承: 我们都知道PHP中的类(class)是单继承的,那是不是就没有办法实现多重继承了呢?答案是否定的.我们可以通过其它特殊的方式实现类的多重继承,比 如使用接口(interface)实现,只要把类的特征抽象为接口,并通过实现接口的方
  php中使用接口(interface)实现多重继承:
    我们都知道PHP中的类(class)是单继承的,那是不是就没有办法实现多重继承了呢?答案是否定的.我们可以通过其它特殊的方式实现类的多重继承,比 如使用接口(interface)实现,只要把类的特征抽象为接口,并通过实现接口的方式让对象有多重身份,通过这样就可以模拟多重继承了.
    下面是一个用接口(interface)实现多重继承的例子,源代码如下:
    <?php
    interface UserInterface{ //定义User的接口
    function getname();
    }
    interface TeacherInterface{ //teacher相关接口
    function getLengthOfService();
    }
    class User implements UserInterface { //实现UserInterface接口
    private $name = “tom”;
    public function getName(){
    return $this->name;
    }
    }
    class Teacher implements TeacherInterface { //实现TeacherInterface接口
    private $lengthOfService = 5; // 工龄
    public function getLengthOfService(){
    return $this->lengthOfService;
    }
    }
    // 继承自User类,同时实现了TeacherInterface接口.
    class GraduateStudent extends User implements TeacherInterface {
    private $teacher ;
    public function __construct(){
    $this->teacher = new Teacher();
    }
    public function getLengthOfService(){
    return $this->teacher->getLengthOfService();
    }
    }
    class Act{
    //注意这里的类型提示改成了接口类型
    public static function getUserName(UserInterface $_user){
    echo “Name is ” . $_user->getName() .“<br>”;
    }
    //这里的类型提示改成了TeacherInterface类型.
    public static function getLengthOfService(TeacherInterface $_teacher){
    echo “Age is ” .$_teacher->getLengthOfService() .“<br>”;
    }
    }
    $graduateStudent = new GraduateStudent();
    Act::getUserName($graduateStudent);
    Act::getLengthOfService($graduateStudent);
    //结果正如我们所要的,实现了有多重身份的一个对象.
    ?>
    示例运行结果如下:
    Name is tom
    Age is 5

    有帮助
    (0)
    0%
    没帮助
    (0)
    0%