PHP屬性的訪問(wèn)控制有哪些規(guī)則

PHP
小樊
81
2024-09-21 02:16:49

PHP 屬性(也稱為成員變量)的訪問(wèn)控制主要遵循以下規(guī)則:

  1. 公共屬性(Public)

    • 公共屬性可以在任何地方被訪問(wèn),包括類的內(nèi)部、子類和類的外部(通過(guò)對(duì)象實(shí)例)。
    • 公共屬性的值對(duì)所有實(shí)例共享。
  2. 受保護(hù)屬性(Protected)

    • 受保護(hù)屬性只能在類的內(nèi)部以及繼承該類的子類中被訪問(wèn)。
    • 受保護(hù)屬性的值僅對(duì)類及其子類可見(jiàn),不會(huì)對(duì)外部暴露。
  3. 私有屬性(Private)

    • 私有屬性僅在類的內(nèi)部可見(jiàn),即使是繼承該類的子類也無(wú)法訪問(wèn)。
    • 私有屬性的值對(duì)所有外部實(shí)體都是隱藏的,只能通過(guò)公共或受保護(hù)的 getter 和 setter 方法進(jìn)行訪問(wèn)和修改。
  4. 默認(rèn)訪問(wèn)控制(None)

    • 如果不顯式指定訪問(wèn)控制修飾符(public, protected, 或 private),則屬性默認(rèn)為“受保護(hù)”(protected)。
    • 這意味著屬性可以在類的內(nèi)部被訪問(wèn),但不能在類的外部通過(guò)對(duì)象實(shí)例直接訪問(wèn)。
  5. 構(gòu)造函數(shù)中的屬性初始化

    • 構(gòu)造函數(shù)允許在創(chuàng)建對(duì)象時(shí)初始化屬性。
    • 可以在構(gòu)造函數(shù)中使用公共、受保護(hù)或私有屬性,具體取決于設(shè)計(jì)需求。
  6. 屬性訪問(wèn)器(Getter)和修改器(Setter)

    • 可以為屬性定義訪問(wèn)器(getter)方法來(lái)讀取屬性值。
    • 可以定義修改器(setter)方法來(lái)設(shè)置屬性值。
    • 訪問(wèn)器和修改器方法可以是公共、受保護(hù)或私有的,以控制屬性的訪問(wèn)級(jí)別。
  7. 屬性類型聲明

    • PHP 允許在類定義時(shí)為屬性指定類型聲明(如 int, string, bool 等)。
    • 類型聲明會(huì)強(qiáng)制要求賦給屬性的值符合指定的類型,否則會(huì)引發(fā)錯(cuò)誤。
  8. 屬性默認(rèn)值

    • 可以在類定義時(shí)為屬性指定默認(rèn)值。
    • 如果未顯式設(shè)置屬性值,則將使用默認(rèn)值。
  9. 屬性不可變性

    • 可以通過(guò)將屬性聲明為私有來(lái)使屬性不可變,這樣就無(wú)法在類的外部修改其值。
    • 對(duì)于公共屬性,可以通過(guò)定義 getter 方法來(lái)控制其值的讀取,并在 getter 方法內(nèi)部決定是否允許修改。
  10. 屬性繼承

    • 在 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)。

0