什麼是資料隱藏?
看到這個有的人會覺得挺不理解的。在前面的文章中,介紹類的時候,我們說定義變數用的關鍵詞是public,但是不止這一個,還有public、private、protected、static和final,這些關鍵詞是用來限定類成員,包括變數和方法的存取權限的。接下來,我們就先講解前三個關鍵詞的用法。
友情提示:
對成員變數和成員方法進行限定在關鍵字的使用上都是一樣的。所以這裡我們只以成員變數為例說明這幾種關鍵字的不同用法。對於成員方法同樣適用。
下面,我們來具體介紹這幾個關鍵詞:
(1)public
中文翻譯是公用的。顧名思義,就是公開的,不需要隱藏的資料資訊。可以在程式中的任何位置(類內、類外)被其他的類和對象調用。子類可以繼承和使用父類中所有的公用成員。
在講解本章之前,我們定義變數和方法的聲明都是用public,而所有的方法在預設狀態下也是public,所以對變數和方法的調用顯得十分混亂。為瞭解決這個情況,我們將要講述第二個關鍵字private。
因為之前都是用的public,所以這裡我們就不舉例子了。
(2)private
中文翻譯為私人的,私人的。被private修飾的變數和方法,只能在所在的類的內部被調用和修改,不可以在類的外部被訪問。在子類中也不可以。
private執行個體展示:
<?phpheader("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的執行個體展示:
<?phpheader("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關鍵字來修飾變數,以防止變數在類外被直接修改和調用。