php 定義類屬性和方法的public protected private 修飾詞的區別


這三個詞在定義類的屬性和方法時使用,其最大的區別在與他們作用域不同
public :全局使用,不僅是本類,其子類,創建的對象都可以使用,甚至子類的子類由於繼承關系,也可以使用.
protected:本類和其子類使用,如果后續有繼承的話,
private : 僅限本類使用

    class ClassA
    {
        public $a = 1;
        protected $b = 2;
        private $c = 3;
        public function share() {
            echo 'a='.$this->a."\n";
            echo 'b='.$this->b."\n";
            echo 'c='.$this->c."\n";
        }
        protected function fuZi() {
            echo 'a='.$this->a."\n";
            echo 'b='.$this->b."\n";
            echo 'c='.$this->c."\n";
        }
    }

    class ClassB extends ClassA
    {
        public function  jiCheng() {
          echo  '我是B類繼承了protected的屬性b='.$this->b."\n";
          echo  '我是B類繼承的protected方法'.parent::fuZi()."\n";
        }
        //
        /*protected function fuzi()
        {
            echo 'i am b';
        }*/
    }
    class ClassC extends ClassB
    {
        public function Cji() {
            echo '我是C類繼承了B類a='.$this->a."\n";
            echo '我是C類繼承了B類b='.$this->b."\n";
            $this->fuZi();
            }
    }
    $classB = new ClassB();
    $classB->jiCheng();//經過測試繼承的protected方法屬性都可以獲取

    $classC = new ClassC();
    $classC->Cji();

執行結果如下圖
由於B繼承了A,C又繼承了B,因此就將A里protected屬性和方法傳遞到了C,如果在B里面使用函數的覆蓋,會發現C類里的fuZi函數也跟着變化,這說明protected屬性的作用域是本類和子類,如果在子類中進行了覆蓋,后續使用將是新的函數,將代碼中B類fuZi函數注釋釋放,得到下圖結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM