/*
--------------------------------------------- ----------------------------------
| = 本文為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
{
私人$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
{
私人$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關鍵字不能用於屬性.

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),