PHP继承

这时一篇迟来的更新,因为它应该在前两天就被更新了,但是由于我英语四级没过!没过!没过!导致我心情低落,所以就玩了几天的游戏,哦不,进行了几天反思,痛定思痛 痛何如哉!

以下都是我个人的理解,有错的地方还望不吝赐教。
为什么需要继承?
继承就是 一个子类通过extends父类把父类的属性和方法继承下来。
假设现在现在需要写两个类,小学生类和高中生类,小学生会说话,走路,考试,高中生也会说话走路,考试,那么如果你写两遍说话,走路,考试,那么就会显得臃肿,管理起来也会麻烦很多,如果定义一个类叫做学生类包含说话,走路,考试,然后让小学生类和高中生类来继承这个学生类就会显得好很多,比如这样。

<?php
class student{
    function speak(){
        echo \'说话\';
    }
    function walk(){
        echo \'走路\';
    }
    function test(){
        echo \'考试\';
    }
}
class pupil extends student{
    function test(){
        echo \'小学生考试\';
    }
}
class senior extends student{
    function test(){
        echo \'高中生考试\';
    }
}
$pupil=new pupil();
$pupil->speak();
$pupil->walk();
$pupil->test();
echo \'<br />\';
$senior=new senior();
$senior->speak();
$senior->walk();
$senior->test();
?>

输出:

说话走路小学生考试
说话走路高中生考试

这样代码管理起来就会好很多。
假设现在小学生要学习一个新的技能吃东西,我现在这样写。

<?php
    class student{
        function speak(){
            echo \'说话\';
        }
        function walk(){
            echo \'走路\';
        }
        function test(){
            echo \'考试\';
        }
    }
    class skill{
        function eat(){
            echo \'吃东西\';
        }
    }
    class pupil extends student,skill{
        function test(){
            echo \'小学生考试\';
        }
    }
    $pupil=new pupil();
    $pupil->speak();
    $pupil->walk();
    $pupil->test();
    $pupil->eat();
?>

如果这样写,那么就会报错:

Fatal error: Class \'studentskill\' not found in D:xampphtdocs1.php on line 18

因为php中是不能这样实现多继承的,如果想要实现多继承可以这么写:

<?php
        class student{
            function speak(){
                echo \'说话\';
            }
            function walk(){
                echo \'走路\';
            }
            function test(){
                echo \'考试\';
            }
        }
        class skill extends student{
            function eat(){
                echo \'吃东西\';
            }
        }
        class pupil extends skill{
            function test(){
                echo \'小学生考试\';
            }
        }
        $pupil=new pupil();
        $pupil->speak();
        $pupil->walk();
        $pupil->test();
        $pupil->eat();
?>

输出:

说话走路小学生考试吃东西

先用一个skill类继承student类,然后再用pupil类继承skill类,这样就相当于pupil类继承了student类和skill类。

收藏 打印