首頁 >後端開發 >php教程 >子承父業,php繼承的私貨

子承父業,php繼承的私貨

autoload
autoload原創
2021-03-03 11:08:542839瀏覽

  定義:有限繼承,指子類別在繼承父類別的成員的時候,並非繼承所有內容,而是繼承並使用父類部分內容。通俗的理解就是,公司的上一任CEO在離任時,準備把公司的一些事物交接給現任CEO,交接的文件,工作內容都是可以書面化記錄下來隨時查閱,但是對於一些工作的見解這些是沒辦法交接的,這就是現任CEO對對上任CEO的有限繼承。

1.繼承內容:PHP中繼承是子類別繼承父類別所有的公有成員受保護成員私有屬性,不能繼承父類別的私有方法。

<?php
    class A{
      
        public $name=&#39;张三&#39;;
        protected $sex=&#39;man&#39;;
        private  $age=&#39;25&#39;;

        public function getName(){
           echo $this->name."<br>";
        }
        protected function getSex(){
           echo $this->sex."<br>";
        }
        private function getAge(){
          echo $this->age."<br>";
        }

    }
    class B extends A{
        
        public function getA(){
           $this->getName();
           $this->getSex();
           $this->getAge();//父类私有方法无法继承

        }
    }

    $a=new B();
    var_dump($a);
  /*object(B)#1 (3) { 
                          ["name"]=> string(6) "张三" 
                          ["sex":protected]=> string(3) "man" 
                          ["age":"A":private]=> string(2) "25" }
  */
?>

2.受保護繼承protected

#    protected關鍵字的產生本身就是純粹用於繼承的,表示允許被子類別在子類別內部存取的意思,而不允許被外部直接存取。

<?php
    class A{
       public $name=&#39;张三&#39;;
        protected $sex=&#39;man&#39;;
        private  $age=&#39;25&#39;;

        public function getName(){
           echo $this->name."<br>";
        }
        protected function getSex(){
           echo $this->sex."<br>";
        }
        private function getAge(){
          echo $this->age."<br>";
        }

    }
    class B extends A{
        public function getA(){
           $this->getName();
           $this->getSex();
      }
    }
    $a=new B();
    var_dump($a);
    echo "<br>";
    
   //$a->getSex();    //: Call to protected method A::getSex() from context  不能在外部访问
  
?>

          小提示:存取父類別私有成員:子類別若想存取父類別私有成員,那麼前提是父類別提供公有或受保護的方法給子類別存取(一般不建議使用,否則設定私有的意義就沒有了),。

3.靜態成員(類別常數)

   也遵循繼承規則(PHP繼承本質是物件),只是存取方式是由類別存取。

<?php
class Fu{
    const NAME = &#39;人&#39;;
    public static $count = 0;
    protected static $type = array(&#39;黑&#39;,&#39;黄&#39;,&#39;白&#39;);
    
    public static function getCount(){
        echo self::NAME;
        echo self::$count;
    }
    protected static function getType(){
        print_r(self::$type);
    }
}

class Zi extends Fu{
    //依然需要子类中访问受保护成员
    public static function getFu(){
        Fu::getType();
    }
}

echo Zi::$count;	//允许直接访问
Zi::getCount();	//访问父类静态方法
Zi::getFu();	//利用子类公有方法访问父类受保护成员
?>

4.建構方法析構方法也可以被子類別繼承,此時需要注意子類別物件實例化時對應的父類別建構方法的參數。

<?php
//父类
class Fu{
    private $money;
    public function __construct($money){
        $this->money = $money;
    }
    
    public function __destruct(){
        echo &#39;die&#39;;
    }
}

//子类继承
class Zi extends Fu{}

//子类实例化:自身是空类,没有指定构造方法
//$m = new Zi();					//错误:缺少参数,因为会自动调用父类构造方法
$m = new Zi(100);					//正确
?>

推薦:php教學

#

以上是子承父業,php繼承的私貨的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn