美文网首页
PHP中的继承与重写

PHP中的继承与重写

作者: kangyiii | 来源:发表于2017-03-10 09:19 被阅读0次

    A类具有某些特征,B类具有A类的所有特征,同时还有自己独特的特征,此时我们就要用的继承.

    几个概念

    1. 继承:一个类从另一个以后的类获得其特性,称为继承
    2. 派生:从一个已有的类产生一个新的类,称为派生
      上述继承和派生只是在
    3. 单继承:一个类只能从一个上级类继承其特性信息。PHP不能多继承
    4. 扩展:在子类中在定义自己的一些新的特有的特性信息,如果不能扩展,继承就变得没有意义

    访问(权限)修饰符

    public:可以在任何环境下访问
    protected:只能在该类或者子类中使用
    private:只能在该类中使用

    <?php 
            class jizhuidongwu{
                public $prop1 = "有脊椎";
                function show1(){
                    echo "<br/ >父类说特征:".$this->prop1;
                }
                function construct($p){
                    $this->$prop1 = $p;
                }
            }
            class human extends jizhuidongwu{
                public $prop2 = "两脚走路";
                function show2(){
                    //子类调用父类的方法
                    parent::show1();
                    echo "<br/> 子类说特征:".$this->prop1;
                    echo "<br/> 子类说特征:".$this->prop2;
                }
                function construct($p1,$p2){
                    parent::__construct($p1);
                    $this->$prop2 = $p2;
                }
            }
            $p = new human("我是父类","我是子类");
            $p -> show2();
        ?>
    

    有构造方法子类继承有构造方法父类写法

    写法1:重写父类构造方法,不再调用父类构造方法

    <?php
            class C{
                public $p1 = 1;
                function __construct($p1){
                    $this -> p1 = $p1;
                    echo "<br/>父类构造方法";
                }
            }
            class D extends C{
                public $p2 = 2;
                function __construct($p1,$p2){
                    $this->p1 = $p1;
                    $this->p2 = $p2;
                    echo "<br/>子类构造方法";
                }
            }
            $d1 = new D(20,30);
        ?>
    

    输出结果:子类构造方法

    写法2:传值到父类的构造方法,会调用父类构造方法

        <?php
            class C{
                public $p1 = 1;
                function __construct($p1){
                    $this -> p1 = $p1;
                    echo "<br/>父类构造方法";
                }
            }
            class D extends C{
                public $p2 = 2;
                function __construct($p1,$p2){
                    parent::__construct($p1);
                    $this->p2 = $p2;
                    echo "<br/>子类构造方法";
                }
            }
            $d1 = new D(20,30);
        ?>
    

    输出结果:
    子类构造方法
    父类构造方法

    重写

    从父类继承下来的属性或方法重新"定义"。

    1. 访问控制权限
      父类public 子类只能public ,父类protected 子类可以public,也可以protected,子类只能和父类的全向相同,或者比父类更加"开放"。父类中的private,子类无法获取,无从谈起继承。

    2. 参数形式
      父类方法如果有参数,子类若想覆盖父类方法,必须也带有参数,数量也必须一样。构造方法比较特殊,子类参数只能和父类相同或者比父类多。

    最终类final class

    一个类没有特殊声明,就可被别的类继承,但是如果声明为最终类,则不能被继承

    final class 类名{
      //code
    }
    

    最终方法finalmethod

    一个方法没有特殊声明,则下级类可以对其进行重写,但是如果声明为最终方法,则不能被重写

    final function 方法名(){
      //code
    }
    

    相关文章

      网友评论

          本文标题:PHP中的继承与重写

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