zoukankan      html  css  js  c++  java
  • Php面向对象 – 继承和重写

    Php面向对象 – 继承和重写

    承受:

    php于,通过类。使用特殊的经营宗旨。

    通过定义类,采用extends来表示当前的类对象继承该类的对象。

    样例:

    class C

    {

           public  $p_c =  “value c”;

    }

    class D extends C

    {

           public  $p_d = “value d”;

    }

    $o =  new D;

    var_dump($o->p_c)

    var_dump($o->p_d)

    输出:string(7) “value c”  string(7)“value d”

    继承,指的是两个对象之间,那么哪有这两个对象?

    Instanceof 操作符 (推断对象是否是某类的实例)

    var_dump($o instanceof D);

    输出:bool(true)

    var_dump($o instanceof C);

    输出:bool(true)

    因此,一个对象即是当前类的实例,也是该类所继承类的实例。

    Class D extends C

    D类对象,继承自C类对象。

    父类:被继承的类,C类

    子类:须要继承的类,D类

    基类:C类是D类的基类

    扩展类:D类是C类的扩展类。

    重要:

    php是单继承。

    继承的目的:

    在于扩展,或者使用某类已经存在的操作和数据。

    重写 override

    继承时,假设发生成员冲突,php的处理方式。为重写。就是子类同名成员覆盖父类同名成员。不能看到父类的同名成员。

    样例:

    1.

    class P

    {

           public  $name = ‘P’;

    }

    class C extends P

    {

           public $name = “C”;

    }

    $o = new C;

    echo $o->name;

    2.

    class P

    {

           public  $name = ‘P’;

           public function  sayName()

           {

                  echo‘parent::name’,$this->name;

           }

    }

    class C extends P

    {

           public  $name = “C”;

           public  function  sayName()

           {

                  echo‘self::name’,$this->name;

           }

    }

    $o = new C;

    $o->sayName();

    输出:self::name C

    构造方法重写:

    样例:

    class P

    {

           public__construct()

           {

                  echo“parent::construct”;

           }

    }

    class D extends P

    {

           public__construct()

           {

                  echo“self::construct”;

           }

    }

    $o  =new D;

    输出:self::construct

    假设须要,强制运行被重写的父类方法,能够显示的使用父类来调用对应的父类方法就可以:

    样例:

    class P

    {

           public__construct()

           {

                  echo“parent::construct”;

           }

    }

    class D extends P

    {

           public__construct()

           {

                  P::__construct();

                  echo“self::construct”;

           }

    }

    $o  =new D;

    输出:parent::construct self::construct

    能够使用一个keyword。在类内。取代当前的父类

    parentkeyword

    样例:

    class P

    {

           public__construct()

           {

                  echo“parent::construct”;

           }

    }

    class D extends P

    {

           public__construct()

           {

                  parent::__construct();

                  echo“self::construct”;

           }

    }

    $o  =new D;

    假设说父类的构造须要对应的參数,则须要在调用时,将父类构造方法须要的參数传递到方法内。

    样例:

    class Goods

    {

           public  $goods_name ;

           public  $goods_price;

           public  function  __construct($name,$price)

           {

                  $this->goods_name= $name;

                  $this->goods_price= $price;

           }

    }

    class GoodsBook extends Goods

    {

           public  $pages;

           public  function  __construct($name,$price,$pages)

           {

                  parent::__construct($name,$price);

                  $this->pages= $pages;

           }

    }

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4802002.html
Copyright © 2011-2022 走看看