中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP類中訪問控制的Tips有哪些

發布時間:2021-10-11 11:01:34 來源:億速云 閱讀:137 作者:柒染 欄目:大數據

這篇文章給大家介紹PHP類中訪問控制的Tips有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

 

PHP類中訪問控制的一些Tips

包括PHP在內的大部分面向對象的編程語言,都提供了對類的變量或方法的訪問控制。這是實現面向對象封裝能力的基礎。變量其實就是數據,而方法函數就是處理這些數據的操作,根據最少知識原則,一些數據你不需要知道它的存在。這時,就需要使用private私有的變量和方法,私有的變量或方法只有這個類自己可以訪問。而有些變量和方法自己的子類需要使用,但又不能暴露給外部,那么我們就會使用protected,也就是受保護的。最后就是公開不管類內部、外部還是繼承的子類都可以使用的public公共變量或方法了。

我們通過變量的訪問控制先來復習一下這三種訪問控制符的作用。

class A {
   private $private;
   protected $protected;
   public $public;

   public function setPrivate($p){
       $this->private = $p;
   }

   public function setProtected($p){
       $this->protected = $p;
   }

   public function setPublic($p){
       $this->public = $p;
   }

   public function testA(){
       echo $this->private, '===', $this->protected, '===', $this->public, PHP_EOL;
   }
}

class B extends A{
   public function testB(){
       echo $this->private, '===';
       echo $this->protected, '===', $this->public, PHP_EOL;
   }
}

$a = new A();
// $a->private = 'a-private'; // atal error: Uncaught Error: Cannot access private property A::$private
$a->setPrivate('a-private');
// $a->protected = 'a-protected'; // atal error: Uncaught Error: Cannot access protected property A::$protected
$a->setProtected('a-protected');
$a->public = 'c-public';
$a->testA();

echo "Out side public:" . $a->public, PHP_EOL;
// echo "Out side private:" . $a->private, PHP_EOL; // Fatal error: Uncaught Error: Cannot access private property A::$private
// echo "Out side protected:" . $a->protected, PHP_EOL; // Fatal error: Uncaught Error: Cannot access protected property A::$protected

$b = new B();
$b->setProtected('b-protected');
$b->public = 'b-public';
$b->testB(); // 沒有b-private

$b->setPrivate('b-private');
$b->testB(); // 沒有b-private

 

從上述代碼中很清晰的可以看出,除了public之外的變量都不能在類外部直接調用或者賦值。所以我們使用setXXX()的public方法來為$private和$protected賦值。這里就出現了封裝的概念了,比如在setPrivate()中我們就可以對傳遞過來的$p變量進行邏輯判斷而決定是否將值賦給$private。


B類繼承了A類,所以它可以訪問到A類的$public和$protected變量,但是,請注意,$private變量是無法訪問到的。所以即使調用了setPrivate()方法為$private賦值了,但因為B無法訪問,所以依然取不到$private的值。有小伙伴要問了,這種情況不報錯?當然不會報錯,B類會在自己的范圍內查找$private變量,沒有定義的話就會生成一個局部的變量并賦值為空。


那么子類要使用$private應該怎么辦呢?

class C extends A {
   private $private;

   public function testC(){
       echo $this->private, '===', $this->protected, '===', $this->public, PHP_EOL;
   }

   // public function setPrivate($p){
   //     $this->private = $p;
   // }
}

$c = new C();
$c->setProtected('c-protected');
$c->public = 'c-public';
$c->setPrivate('c-private');
$c->testC();
 

先不要打開C類setPrivate()方法的注釋,你會發現$private依然是空值。也就是說,定義了同名的$private私有變量并不是對父類的變量覆蓋,而是在本類作用域內新建了一個。父類的setPrivate()方法當然也不能訪問子類的private變量,因此,子類也要重寫一個setPrivate()方法來為自己的$private變量賦值。


記住一點:private修飾的變量或方法僅對當前類開放


對于方法的修飾也是一樣的效果。

class D {
   public function testD(){
       $this->show();
   }
   private function show(){
       echo 'This is D', PHP_EOL;
   }
}

class E extends D {
   private function show(){
       echo 'This is E', PHP_EOL;
   }
}

$e = new E();
$e->testD(); // This is D
 

子類E調用父類D的testD()方法,testD()方法中調用的是private修飾的show()方法,根據上面的原則,它依然調用的是自己D類的show()方法。

 

關于訪問控制的內容還是比較簡單的,最主要的就是private這個修飾符的問題需要注意,其他的其實還是比較好理解的。不過越是簡單的東西越是基礎,面向對象脫離不了這三個簡單的訪問修飾符,它們在現代軟件開發中的份量十足,只有牢牢掌握它們才是我們正確的學習之道。


關于PHP類中訪問控制的Tips有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当涂县| 玉环县| 岱山县| 孝昌县| 仁布县| 缙云县| 福海县| 潼关县| 德兴市| 项城市| 吕梁市| 丹棱县| 横峰县| 城固县| 兴城市| 晋城| 滨州市| 共和县| 治县。| 成安县| 平江县| 仁怀市| 台中市| 图木舒克市| 千阳县| 类乌齐县| 海晏县| 巴里| 错那县| 西乌| 六盘水市| 托克逊县| 印江| 葵青区| 无棣县| 万安县| 墨江| 师宗县| 新余市| 右玉县| 扎兰屯市|