需要注意的是,型別化屬性在內部永遠不會初始化為預設的 null 值。當然,除非您自行將它們初始化為 null。這就是為什麼如果您在初始化之前嘗試存取它們,總是會遇到這個錯誤的原因。
**型別化屬性 foo::$bar 必須在初始化之前不能被存取**
<?php
class User
{
public $id;
public string $name; // 型別化屬性(未初始化)
public ?string $age = null; // 型別化屬性(已初始化)
}
$user = new User;
var_dump(is_null($user->id)); // bool(true)
var_dump(is_null($user->name)); // PHP 致命錯誤:型別化屬性 User::$name 必須在初始化之前不能被存取
var_dump(is_null($user->age));// bool(true)
?>
另一個值得注意的是,物件類型的屬性不能初始化為 null 以外的任何值。因為屬性的評估發生在編譯時,而物件的實例化發生在執行時。最後一點,由於 callable 類型的行為取決於上下文,因此不受支援。