zoukankan      html  css  js  c++  java
  • PHP继承

    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类。

    方法重写
    如果要实现的两个类有共同特征,那么就可以将这个共同的特征抽象出一个父类。
    比如,有小学生类和中学生类,这样的两个类,他们都是学生,那么就可以抽象出一个学生类,学生都会考试,那么就把考试这个方法写在学生这个类里面。
    那么问题就是,小学生是小学生的考试,中学生是中学生的考试,我不可能都输出考试,这里就用到了方法重写。
    在子类中定义一个与父类一样的方法,这样执行的时候,父类中的方法就会被覆盖,从而输出的只有子类中定义的方法。
    举例:

    <?php
            class student{
                function test(){
                    echo '考试';
                }
            }
            class pupil extends student{
                function test(){
                    echo '小学生考试';
                }
            }
            class senior extends student{
                function test(){
                    echo '中学生考试';
                }
            }
            $pupil=new pupil();
            $pupil->test();
            echo '<br />';
            $senior=new senior();
            $senior->test();
    ?>
    

    输出:

    小学生考试
    中学生考试
  • 相关阅读:
    个人总结05
    微软拼音的用户体验
    个人总结04
    典型用户和用户场景模式
    个人总结03
    个人总结02
    构建之法阅读笔记06
    个人总结01
    学习进度条——第七周
    WebApi学习总结系列第五篇(消息处理管道)
  • 原文地址:https://www.cnblogs.com/Timesi/p/9536422.html
Copyright © 2011-2022 走看看