2 回答

TA貢獻1818條經驗 獲得超11個贊
受保護的屬性只能從同一類或子類中的方法訪問。聲明該屬性protected
可防止在類外部對其進行賦值或讀取。
在文檔塊中添加@property
注釋只是讓 IDE 知道該屬性存在。它將使用它來抑制像您收到的警告一樣的警告,并完成屬性名稱補全,就像它對在類定義中顯式聲明的屬性所做的那樣。它對 PHP 本身處理屬性的方式影響不大;訪問控制由屬性是否聲明為公共、私有或受保護來指定。
您還可以在類定義中創建公共和私有屬性。
public?string?$a; private?string?$a;
Public 意味著該屬性可以從類外部訪問(就像動態創建的屬性一樣),private 意味著它只能從類本身(而不是子類)訪問。
如果您沒有顯式聲明屬性,并使用賦值動態創建它,則它會自動成為公共屬性。

TA貢獻1890條經驗 獲得超9個贊
這是屬性類型的顯式聲明:
protected string $a = '';
這是內部強制的限制。如果您嘗試將字符串以外的其他內容分配給$a,您將收到 TypeError 異常。像這樣聲明屬性類型提示是 7.4 中引入的功能。如果您知道您的環境將是 7.4+,您應該更喜歡此方法。
這是一個文檔塊:
/**
* @var string
*/
public $a;
這是一條對腳本運行時沒有影響的注釋。它的存在只是為了讓 PHPStorm 或 NetBeans 等 IDE 可以在您的開發環境中提供提示。如果您使用像上面這樣的顯式類型提示,那么這些文檔塊聲明是多余且不需要的。即,沒有必要這樣做:
/**
* @var string
*/
public string $a;
請注意,有相當多的庫使用注釋文檔塊來提供特殊的運行時含義。這些庫使用反射來動態解析文檔塊注釋并對它們做出反應。換句話說,PHP 本身不受文檔塊注釋的影響,但您的腳本能夠查看它們,因此能夠根據它們確定條件。例如,使用 Doctrine,您可以使用文檔塊注釋來解釋數據庫字段的樣子:
/**
* @ORM/Column(type="int")
* @ORM/Id
*/
protected $id;
- 2 回答
- 0 關注
- 333 瀏覽
添加回答
舉報