属性默认值 null 是否与无默认值相同?是的

2022-08-30 16:37:10

因此,我可以安全地重构所有实例吗?

class Blah
{
    // ...
    private $foo = null;
    // ...
}

class Blah
{
    // ...
    private $foo;
    // ...
}

?


答案 1

非类型化属性

答案很简单,是的。查看 http://php.net/manual/en/language.types.null.php

特殊的 NULL 值表示没有值的变量。NULL 是 null 类型的唯一可能值。

您可以通过对属性执行a来轻松进行测试,您将看到两个实例var_dump()NULL

class Blah1
{
    private $foo;

    function test()
    {
        var_dump($this->foo);
    }
}

$test1 = new Blah1();
$test1->test(); // Outputs NULL


class Blah2
{
    private $foo = NULL;

    function test()
    {
        var_dump($this->foo);
    }
}

$test2 = new Blah2();
$test2->test(); // Outputs NULL

类型化属性

PHP 7.4 添加了类型化属性,这些属性在默认情况下不会像非类型化属性一样默认为非类型化属性,而是默认为特殊的“未初始化”状态,如果在写入属性之前读取该属性,这将导致错误。有关属性,请参阅 PHP 文档中的“类型声明”部分。null


答案 2

属性默认值 null 是否与无默认值相同?

是的

根据文档:

特殊值表示没有值的变量。NULL

null是尚未设置为任何特定值的变量的概念。在区分和空1 值时,相对容易出错。null

private $foo = null;完全等效于 。在这两种情况下,类属性都使用 值 定义。private $foo;null

isset将正确返回 的两个声明 ; 是 的布尔值与 相反,这些值是,如上所述。false$fooissetis_nullnull

作为参考,我建议查看PHP类型比较表

1:在这种情况下,我指的是为函数返回true的类型化值,或者在其他方面被视为“falsey”的值。即 null0false、空数组 (array()) 和空字符串 ('')。“0”在技术上也是空的,尽管我发现它是PHP作为一种语言的奇怪之处。


推荐