需要注意的是,类型化属性在内部从未被初始化为默认的 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 以外的任何值。 因为属性的求值发生在编译时,而对象实例化发生在运行时。 最后一点,由于其上下文相关的行为,不可调用类型不受支持。