php物件導向之資料隱藏

巴扎黑
發布: 2023-03-07 12:20:01
原創
2719 人瀏覽過

什麼是資料隱藏?

看到這個有的人會覺得還蠻不懂的。在前面的文章中,介紹類別的時候,我們說定義變數用的關鍵字是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 &#39;我的名字叫&#39;;
$preson ->setName("布里茨");    //通过访问成员方法进行赋值
echo $preson -> getName();      //在通过访问成员方法进行访问
//错误的使用方式
echo &#39;我的名字叫&#39;;
echo Preson :: $name;
登入後複製

在上述實例中,對私有變數$name的修改與訪問,只能透過呼叫成員方法來實現。如果直接調用,就會發生錯誤。

(3)protected

中文翻譯為保護的意思。 private關鍵字可以將資料完全隱藏,除了在本類別中,別的地方都不可以調用,子類別中也不可以。但是有些情況是部分變數需要在子類別中可以調用,但是對於另外的類別來說,還是要做到封裝。這時候就要用到我們的protected關鍵字了。

用protected修飾的類別成員,可以在本類別和子類別中被調用,但是在其他地方不能被調用。

protected的實例展示:

<?php
header("content-type:text/html;charset=utf-8");
class Preson{
   protected $name = &#39;维克托&#39;;
}
class Preson1 extends Preson{
   public function showName(){
       echo &#39;只有真确的调用,我才会出现&#39;;
       echo &#39;<br/>&#39;;
       echo &#39;我的名字是:&#39; . $this ->name;
       echo &#39;<br/>&#39;;
   }
}
$preson = new Preson1();
$preson -> showName();
echo &#39;你调用错了,所以下面不报错算我输:&#39;;
$preson -> name = &#39;德莱文&#39;;
登入後複製

上述實例中,先用關鍵字protected宣告一個變量,然後再子類別的方法中呼叫一次,最後在類別外直接呼叫一次,結果一目了然。

提示:

雖然在PHP中沒有對修飾變數的關鍵字做強制性的規定和要求,但從面相物件的特徵和設計方面考慮,一般使用private和protected關鍵字來修飾變量,以防止變數在類別外直接修改和呼叫。

以上是php物件導向之資料隱藏的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板