首頁 後端開發 php教程 第八節--訪問方式_PHP教程

第八節--訪問方式_PHP教程

Jul 21, 2016 pm 04:01 PM
方式 訪問

/*
--------------------------------------------- ----------------------------------
| = 本文為Haohappy讀>
| = 中Classes and Objects一章的筆記 
| = 翻譯為主要在Classes and Objects一章中的筆記 
| = 翻譯為主個人心得 
| = 為避免可能發生的不必要的麻煩 》批評、謝謝,希望與所有PHP愛好者共同進步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
----------------- -------------------------------------------------- ------------
*/
第八節--存取方式
PHP5的存取方式允許限制對類別成員的存取. 這是在PHP5中新增的功能,但在許多物件導向語言中都早已存在. 有了存取方式,才能開發一個可靠的物件導向應用程式,並且建立可重複使用的物件導向類別庫.
像C 和Java一樣,PHP有三種存取方式:public,private和protected. 對於一個類別成員的存取方式,可以是其中之一. 如果你沒有指明存取方式,預設地存取方式為public. 你也可以為靜態成員指明一種存取方式,將存取方式放在static關鍵字之前(如public static).
Public成員可以被毫無限制地存取.類別外部的任何程式碼都可以讀寫public屬性. 你可以從腳本的任何地方呼叫一個public方法. 在PHP的前幾個版本中,所有方法和屬性都是public, 這讓人覺得對象就像是結構精巧的數組.
Private(私有)成員只在類的內部可見. 你不能在一個private屬性所在的類別方法之外改變或讀取它的值. 同樣地,只有在同一個類別中的方法可以呼叫一個private方法. 繼承的子類別也不能存取父類別中的private 成員.
要注意,類別中的任何成員和類別的實例都可以存取private成員. 看例子6.8,equals方法將兩個widget進行比較.==運算子比較同一個類別的兩個物件,但這個例子每個物件實例都有唯一的ID.equals方法只比較name和price. 注意equals方法如何存取另一個Widget實例的private屬性. Java和C都允許這樣的操作.
Listing 6.8 Private members

複製程式碼 程式碼如下:
   class Widget  
   {  
            私人$id;  
       公共函數 __construct($name, $price)  
       {  
           $this->name = $name;              $this->id = uniqid();  
       }  
//檢查兩個小部件是否相同,檢查兩個小部件是否相同  
       public function equals($widget)  
     widget->名稱) AND  
               ($this->價格 == $widget->價格));      $w2 = new Widget('Cog', 5.00);  
   $w3 = new Widget('Gear', 7.00);  
   //TRUE {  
       print("w1 且w2 相同
n");  
   }  
   //FALSE  }  
   //FALSE  }  
   //FALSE  }     {  
print("w1 和w3 相同
n");  
   }  
   //FALSE, == 在比較中包含id    ID 不同  
   {  
       print("w1 與 w2是相同的
n」);  
  >  
如果你對物件導向程式設計不熟悉,你可能想知道用private成員的目的是什麼. 你可以回憶一下封裝和耦合的想法,這在本章開頭我們有討論過. Private成員有助於封裝資料. 他們可以隱藏在一個類別內部而不被類別外部的程式碼接觸到. 同時他們還有助於實現鬆散的耦合. 如果資料結構外的程式碼不能直接存取內部屬性,那麼就不會產生一個隱性的關聯性.
當然,大部分private屬性仍然可以被外部程式碼共用. 解決方法是用一對public方法,一個是get(取得屬性的值),另一個是set(設定屬性的值). 建構子也接受屬性的初始值. 這使得成員間的交流通過一個狹窄的,經過良好限定的接口來進行. 這也提供改變傳遞給方法的值的機會. 注意在例子6.8中,構造函數如何強制使price成為一個float數(floadval()).
Protected(受保護的) 成員能被同一個類別中的所有方法和繼承出的類別的中所有方法存取到. Public屬性有違封裝的精神,因為它們允許子類別依賴一個特定的屬性來書寫.protected方法則不會帶來這方面的擔憂.一個使用protected方法的子類別需要很清楚它的父類別的結構才行.
範例6.9由範例6.8改進而得到,包含了一個Widget的子類別Thing. 注意Widget現在有一個叫作getName的protected方法. 如果Widget的實例試圖調用protected方法將會出錯: $w1->getName()產生了錯誤. 但子類別Thing中的getName方法可以呼叫這個protected方法.當然對於證明Widget::getName方法是protected,這個例子顯得過於簡單. 在實際情況下,使用protected方法要依賴於對對象的內部結構的理解.
Listing 6.9 Protected members 
複製程式碼 程式碼如下:
   class Widget  
   {  
            私人$id;  
       公共函數 __construct($name, $price)  
       {  
           $this->name = $name;              $this->id = uniqid();  
       }  
//檢查兩個小工具是否相同  
       public function equals($widget)  
       get->姓名)AND  
               ($this ->price == $widget->price));  
       }  
               return($this->name);  
       }  
}  
   類Thing 擴充 Widget  
   {  
       private       {  
           $this->color = $color;  
    🎜>       公用函數getColor()  
       {  
       
       公用函數getName()  
       {  
       );  
       }  
   }  
   $w1 = new Widget('Cog',   $w1 = new Widget('Cog', 5.00), 5. .00);  
   $w2->setColor ('黃色');  
   //TRUE (仍為! ) 結果仍為真  
   if($w1->equals($w2))  
   {  
       
//print Cog 輸出 Cog  
   print($w2->getName());  
? > 

一個子類別可能改變透過覆寫父類別方法來改變方法的存取方式,儘管如此,仍然有一些限制. 如果你覆寫了一個public類別成員,他子類別中必須保持public. 如果你覆寫了一個protected成員,它可保持protected或變成public.Private成員仍然只在當前類中可見. 聲明一個與父類的private成員同名的成員將簡單地在當前類中建立一個與原來不同的成員. 因此,在技術上你不能覆蓋一個private成員. 
Final關鍵字是限制訪問成員方法的另一個方法. 子類不能覆蓋父類中標識為final的方法. Final關鍵字不能用於屬性.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/316944.htmlTechArticle/* ---------------------- -------------------------------------------------- ------- |=本文為Haohappy讀CorePHPProgramming |=中ClassesandObjects一章的筆記|=翻譯為主個人...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

iOS 17:如何控制哪些應用程式可以存取您的照片 iOS 17:如何控制哪些應用程式可以存取您的照片 Sep 13, 2023 pm 09:09 PM

在iOS17中,Apple可以更好地控制應用程式可以看到的照片內容。繼續閱讀,了解如何按應用程式管理應用程式存取權限。在iOS中,Apple的應用程式內照片選取器可讓您與應用程式分享特定照片,而照片圖庫的其餘部分則保持私密。應用程式必須要求存取您的整個照片圖庫,您可以選擇授予應用程式以下存取權限:受限存取–應用程式只能看到您可以選擇的圖像,您可以隨時在應用程式中或透過前往「設定」&gt ;“隱私和安全性”>“照片”來查看所選圖像。完全存取權限–App可以查看照片

如何在Java中存取JsonNode的JSON欄位、陣列和巢狀物件? 如何在Java中存取JsonNode的JSON欄位、陣列和巢狀物件? Aug 30, 2023 pm 11:05 PM

一個JsonNode是Jackson的JSON樹模型,它可以將JSON讀取為JsonNode實例,並將JsonNode寫入JSON。透過建立ObjectMapper實例並呼叫readValue()方法,我們可以使用Jackson將JSON讀取為JsonNode。我們可以使用JsonNode類別的get()方法來存取欄位、陣列或巢狀物件。我們可以使用asText()方法傳回有效的字串表示,並使用JsonNode類別的asInt()方法將節點的值轉換為Javaint。在下面的範例中,我們可以訪問Json

使用Python存取各種音訊和視訊檔案的元數據 使用Python存取各種音訊和視訊檔案的元數據 Sep 05, 2023 am 11:41 AM

我們可以使用Mutagen和Python中的eyeD3模組存取音訊檔案的元資料。對於視訊元數據,我們可以使用影片和Python中的OpenCV庫。元資料是提供有關其他資料(例如音訊和視訊資料)的資訊的資料。音訊和視訊檔案的元資料包括檔案格式、檔案解析度、檔案大小、持續時間、位元率等。透過存取這些元數據,我們可以更有效地管理媒體並分析元數據以獲得一些有用的信息。在本文中,我們將了解Python提供的一些用於存取音訊和視訊檔案元資料的庫或模組。存取音頻元資料一些用於存取音訊檔案元資料的庫是-使用誘變

解決Tomcat部署war包後無法存取的問題的方法 解決Tomcat部署war包後無法存取的問題的方法 Jan 13, 2024 pm 12:07 PM

如何解決Tomcat部署war包後無法成功存取的困擾,需要具體程式碼範例Tomcat作為一個廣泛使用的JavaWeb伺服器,允許開發人員將自己開發的網路應用程式打包為war檔進行部署。然而,有時我們可能會遇到部署war包後無法成功存取的問題,這可能是由於配置不正確或其他原因引起的。在本文中,我們將提供一些解決這個困擾的具體程式碼範例。一、檢查Tomcat服務

如何解決PHP開發中的外部資源存取和調用 如何解決PHP開發中的外部資源存取和調用 Oct 08, 2023 am 11:01 AM

如何解決PHP開發中的外部資源存取和調用,需要具體程式碼範例在PHP開發中,我們經常會遇到需要存取和調用外部資源的情況,例如API介面、第三方庫或其他伺服器資源。在處理這些外部資源時,我們需要考慮如何進行安全的存取和調用,同時確保效能和可靠性。本文將介紹幾種常見的解決方案,並提供相應的程式碼範例。一、使用curl函式庫進行外部資源呼叫curl是一個非常強大的開源函式庫

win7修改檔案提示變更權限拒絕存取如何解決 win7修改檔案提示變更權限拒絕存取如何解決 Jul 04, 2023 pm 07:01 PM

  win7修改檔案提示變更權限拒絕存取如何解決?有些系統檔案在進行修改的時候,常常會提示我們沒有權限去進行操作。我們可以去進行資料夾權限的功能關閉,或是取得管理員權限。需要修改這類文件的用戶,一起來看看接下來具體的教學分享。 win7修改檔案提示變更權限拒絕存取解決方法  1、先選取對應資料夾,點選上方工具,選取資料夾選項。  2、進入檢視選項卡。  3、取消勾選使用簡單檔案共用然後確定。  4、然後右鍵選擇對應資料夾,點選屬性。  5、進入安全性選項卡。  6、選擇圖示位置,點選進階。  7

win10家庭版共享資料夾無法存取怎麼辦 win10家庭版共享資料夾無法存取怎麼辦 Jan 11, 2024 pm 07:36 PM

在家庭或企業網路環境下,共用資料夾確實是一項極為實用的功能,它能讓您輕鬆地將資料夾分享給其他用戶,以便於檔案的傳輸與分享。 win10家庭版共用資料夾無法存取解決方法:解決方案一:檢查網路連線和使用者權限在嘗試使用Win10共用資料夾時,我們首先需要確認網路連線及使用者權限是否正常。若網路連線故障或使用者未獲得存取共用資料夾的權限,便可能導致無法存取的現象。 1.首先請確保網路連線順暢,以便電腦與共用資料夾所在的電腦在同一區域網路中,能夠正常進行通訊。 2、其次檢查使用者權限,確認目前使用者對於共享文件

Go 語言的時間處理方式有哪些? Go 語言的時間處理方式有哪些? Jun 10, 2023 pm 09:42 PM

Go語言作為一個現代化的程式語言,時間在開發中佔有很重要的地位。 Go語言提供了一些內建的時間函數和結構體,使得時間的處理變得更加便捷。在本篇文章中,將會介紹一些Go語言常用的時間處理方式。 time.Now()我們可以使用time.Now()函數取得目前的時間:now:=time.Now()fmt.Println(now)輸出:2019-06-131

See all articles