什麼是資料隱藏?
看到這個有的人會覺得還蠻不懂的。在前面的文章中,介紹類別的時候,我們說定義變數用的關鍵字是public,但是不只這一個,還有public、private、protected、static和final,這些關鍵字是用來限定類別成員,包括變數和方法的存取權限的。接下來,我們先來講解前三個關鍵字的用法。
友情提示:
對成員變數和成員方法進行限定在關鍵字的使用上都是一樣的。所以這裡我們只以成員變數為例說明這幾種關鍵字的不同用法。對於成員方法同樣適用。
下面,我們來具體介紹這幾個關鍵字:
(1)public
中文翻譯是公共的。顧名思義,就是公開的,不需要隱藏的資料資訊。可以在程式中的任何位置(類別內、類別外)被其他的類別和物件呼叫。子類別可以繼承和使用父類別中所有的公共成員。
在講解本章之前,我們定義變數和方法的宣告都是用public,而所有的方法在預設狀態下也是public,所以對變數和方法的呼叫顯得十分混亂。為了解決這個情況,我們將要講述第二個關鍵字private。
因為之前都是用的public,所以這裡我們就不舉例子了。
(2)private
中文翻譯為私人的,私有的。被private修飾的變數和方法,只能在所在的類別的內部被呼叫和修改,不可以在類別的外部被存取。在子類別中也不可以。
private實例展示:
<?php header("content-type:text/html;charset=utf-8"); class Preson{ private $name = "雷克赛"; public function setName($name){ $this -> name = $name; } public function getName(){ return $this ->name; } } class Preson1 extends Preson{ } $preson = new Preson(); //正确的使用方式 echo '我的名字叫'; $preson ->setName("布里茨"); //通过访问成员方法进行赋值 echo $preson -> getName(); //在通过访问成员方法进行访问 //错误的使用方式 echo '我的名字叫'; echo Preson :: $name;
在上述實例中,對私有變數$name的修改與訪問,只能透過呼叫成員方法來實現。如果直接調用,就會發生錯誤。
(3)protected
中文翻譯為保護的意思。 private關鍵字可以將資料完全隱藏,除了在本類別中,別的地方都不可以調用,子類別中也不可以。但是有些情況是部分變數需要在子類別中可以調用,但是對於另外的類別來說,還是要做到封裝。這時候就要用到我們的protected關鍵字了。
用protected修飾的類別成員,可以在本類別和子類別中被調用,但是在其他地方不能被調用。
protected的實例展示:
<?php header("content-type:text/html;charset=utf-8"); class Preson{ protected $name = '维克托'; } class Preson1 extends Preson{ public function showName(){ echo '只有真确的调用,我才会出现'; echo '<br/>'; echo '我的名字是:' . $this ->name; echo '<br/>'; } } $preson = new Preson1(); $preson -> showName(); echo '你调用错了,所以下面不报错算我输:'; $preson -> name = '德莱文';
上述實例中,先用關鍵字protected宣告一個變量,然後再子類別的方法中呼叫一次,最後在類別外直接呼叫一次,結果一目了然。
提示:
雖然在PHP中沒有對修飾變數的關鍵字做強制性的規定和要求,但從面相物件的特徵和設計方面考慮,一般使用private和protected關鍵字來修飾變量,以防止變數在類別外直接修改和呼叫。
以上是php物件導向之資料隱藏的詳細內容。更多資訊請關注PHP中文網其他相關文章!