PHP 屬性(也稱為成員變量)的訪問控制主要遵循以下規則:
-
公共屬性(Public):
- 公共屬性可以在任何地方被訪問,包括類的內部、子類和類的外部(通過對象實例)。
- 公共屬性的值對所有實例共享。
-
受保護屬性(Protected):
- 受保護屬性只能在類的內部以及繼承該類的子類中被訪問。
- 受保護屬性的值僅對類及其子類可見,不會對外部暴露。
-
私有屬性(Private):
- 私有屬性僅在類的內部可見,即使是繼承該類的子類也無法訪問。
- 私有屬性的值對所有外部實體都是隱藏的,只能通過公共或受保護的 getter 和 setter 方法進行訪問和修改。
-
默認訪問控制(None):
- 如果不顯式指定訪問控制修飾符(public, protected, 或 private),則屬性默認為“受保護”(protected)。
- 這意味著屬性可以在類的內部被訪問,但不能在類的外部通過對象實例直接訪問。
-
構造函數中的屬性初始化:
- 構造函數允許在創建對象時初始化屬性。
- 可以在構造函數中使用公共、受保護或私有屬性,具體取決于設計需求。
-
屬性訪問器(Getter)和修改器(Setter):
- 可以為屬性定義訪問器(getter)方法來讀取屬性值。
- 可以定義修改器(setter)方法來設置屬性值。
- 訪問器和修改器方法可以是公共、受保護或私有的,以控制屬性的訪問級別。
-
屬性類型聲明:
- PHP 允許在類定義時為屬性指定類型聲明(如 int, string, bool 等)。
- 類型聲明會強制要求賦給屬性的值符合指定的類型,否則會引發錯誤。
-
屬性默認值:
- 可以在類定義時為屬性指定默認值。
- 如果未顯式設置屬性值,則將使用默認值。
-
屬性不可變性:
- 可以通過將屬性聲明為私有來使屬性不可變,這樣就無法在類的外部修改其值。
- 對于公共屬性,可以通過定義 getter 方法來控制其值的讀取,并在 getter 方法內部決定是否允許修改。
-
屬性繼承:
- 在 PHP 中,屬性不是被子類繼承的,但子類可以通過 super 關鍵字訪問父類的受保護屬性。
請注意,PHP 中的訪問控制規則主要適用于公共、受保護和私有屬性。默認訪問控制(none)實際上等同于受保護屬性,但在實際編程中并不常用。此外,PHP 7 引入了標量表達式類型聲明,允許在類定義時為屬性指定標量類型(如 int, float, string, bool, array, callable, iterable, object)。