PHP 類別的變數與成員,及其繼承、存取與重寫時要注意的問題
類別的成員屬性(屬性的稱呼相對於「方法」而言)包括類別常數和類別變量,其中類別常數在定義時不可為空,類別的屬性在定義時如果被賦值,只能使用標量和數組,並且不能是表達式,因為類別屬性在編譯期被初始化,PHP 在編譯期不執行表達式。 1、成員的存取控制: public:可以繼承,可以在類別的方法之外被存取 , 如 $obj->prop; protected:可以繼承,不可以在類別的方法之外被訪問 private:不可以繼承,不可以在類別的方法之外存取 PHP 4 使用 var 來聲明類別的屬性,在PHP5之後不再使用,PHP5.3之前使用被警告,PHP5.3之後可以用在 public 之前或單獨使用作為 public 的別名。 這三個存取控制關鍵字也可以修飾建構函數,當private 和protected 修飾類別的建構子時,你只能透過一個publice static 的靜態方法來呼叫建構子以實例化對象,因為夠在函數無法在類別之外被存取了,例如,單例類別的實作:
2、繼承禁止: final 關鍵字,僅用於修飾類別或類別的方法 如果一個類別被 final 修飾,這個類別不能被繼承,如果一個方法被final 修飾,則這個方法不能被子類別重寫(override)。
3、抽象類別和抽象方法:abstract 僅用於類別和方法,抽象類別不能直接用於實例化物件只能用於產生子類
4、類別的常數及其存取 4、類別的常數及其存取
$instance = new Myclass(); echo Myclass::x; echo $instance::x;類別的常數是一個值,在程式碼編譯期常數名被替換為對應的值,在運行期不可修改,因此,類別的常數是與類別本身相關,在實例化物件之前就已經存在了,因此類別的常數可以直接使用類別名稱存取。
5、類別的靜態成員及訪問 static 可以修飾類別的屬性及方法,被static 修飾的成員屬於類別而不屬於類別的實例,靜態成員必須使用類別名稱加雙冒號:: 來訪問, 因為在實例化物件之前靜態成員就存在了,因此,在靜態方法內,禁止使用指向實例本身的偽變量$this(或習慣上稱為$this 指針) ,可以使用關鍵字self 代替類名(相當於類的魔術常數__CLASS__)。 static 不能用來修飾 類別的建構函數,也不能用來修飾介面宣告的方法。
靜態成員可以使用存取控制關鍵字修飾,可以被繼承和重寫,需要注意的是,如果一個子類別繼承了父類別的靜態方法(沒有重寫該方法),那麼子類別呼叫的實際上是父類別的靜態方法。因為靜態成員持有者是類別不是對象,所以類別的多個實例是共享同一個靜態屬性的,在一個實例中修改靜態屬性會影響到另一個實例中的靜態屬性:
後期靜態綁定:為了避免子類別重寫靜態屬性後,使用繼承來的方法仍然存取父類別的靜態屬性, PHP5.3 增加了一個新的語法:後期靜態綁定,使用static 關鍵字取代self 關鍵字,使得static 指向與get_called_class() 傳回的相同的類,即當前呼叫該靜態方法的物件所屬的類,該關鍵字對於靜態方法的存取同樣有效。
6、類別的方法中幾個指向類別或實例的關鍵字 $this->propName $this 指向類別的實例 parent::xxx parent 指向父類,可以存取父類別的靜態常數、靜態屬性(parent::$xxx) ,不能存取父類別的非靜態屬性,可以呼叫父類別的方法(不能是private 方法,無論是否靜態) self::xxx self 指向定義了目前被呼叫的方法的類,用於存取靜態成員和類別的常數 static::xxx 存取實例化了呼叫當前方法的實例的那個類,用於訪問靜態成員和累的常數,他跟 self 的差別是訪問靜態成員時採用 “後期靜態綁定”。 7、類別的繼承中的 重寫問題: 重寫的成員的存取控製程度不能被縮小,例如, public 的成員不能重寫為 protected 非靜態成員不能改寫為靜態成員,靜態成員也不能改寫為非靜態成員 8、介面中定義的方法必須是 public 類別在實作介面的方法時,這些方法也必須是 public 的,具體實作的(不能是 abstract )。 介面也可以定義介面常數,用法與類別常數完全一致,但是介面不可以定義非函數成員。 介面與介面之間可以繼承,介面的繼承可以是多繼承,用逗號隔開(字類別與父類別的繼承是單繼承的) 一個類別可以實現多個接口,用逗號隔開
9、模式約束 PHP 的函數(或類別的方法) 可以在宣告時限定參數的類型,但只能限定array 或object(class/interface) ,如果限定為string 型, PHP 會認為是限定為一個string 類別的object 參數。如果類型被限定為某個接口,則傳入的參數必須是實作該介面的類別的實例。 在介面實作、子類別重寫父類別方法時,不能修改已經限定的參數類型。 在方法、函數呼叫時,如果傳入了與限定的參數類型不同的資料將會報錯,但是可以接受 null 參數。
|

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

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

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

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