在PHP 7.4中如何检查属性是否已经真正初始化。

19

我想在PHP 7.4中检查属性是否已经初始化。将属性设置为null意味着它被初始化为null,但我不能使用isset,因为它即使被设置为null也会返回false。同时我也不能使用property_exists,因为即使未初始化该属性,它也会返回true。

我所知道的唯一方法是使用ReflectionProperty::isInitialized,但这感觉有点奇怪,因为我需要使用这种方法。

class DTO {
    public ?string $something;
}

$object = new DTO();
$object->something = null;

isset($object->something); //returns false
is_initialized($object->something); //should return true;
我可以使用ReflectionProperty编写此函数,但也许我错过了什么?

3
我在php.net上找到了一个关于这个问题的请求:链接。目前看来,ReflectionProperty::isInitialized是解决这个问题的方法。 - Heiko Jerichen
2个回答

8

2
你也可以尝试使用 Throwable 来捕获访问。因为如果它是强类型的,并在初始化之前被访问,它会抛出一个错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接