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