因此我可以安全地重构
的所有实例class Blah
{
// ...
private $foo = null;
// ...
}
到
class Blah
{
// ...
private $foo;
// ...
}
答案 0 :(得分:23)
简单回答,是的。见http://php.net/manual/en/language.types.null.php
特殊的NULL值表示没有值的变量。 NULL是 null类型唯一可能的值。
您可以通过在属性上执行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
答案 1 :(得分:9)
属性默认值null是否与默认值相同?
特殊
NULL
值表示没有值的变量。
null
是一个未设置为任何特定值的变量的概念。区分null
和空 1 值时,相对容易出错。
private $foo = null;
完全等同于private $foo;
。在这两种情况下,class属性都定义为值null
。
isset
的两个声明, false
将正确返回$foo
; isset
与is_null
的布尔相反,如上所述,这些值为null
。
作为参考,我建议您查看PHP type comparison tables。
1:在这种情况下,我指的是对empty
函数返回true的类型值,或者被认为是“falsey”的类型值。 I.E. null
,0
,false
,空数组(array()
)和空字符串(''
)。 '0'
在技术上也是空的,虽然我发现它是一种奇怪的PHP语言。
答案 2 :(得分:1)
除了公认的答案仍然是正确的以外,在PHP 7.4中添加了类型化属性,还需要考虑新的事物。
给出以下代码
class A {
public ?DateTime $date;
}
$a = new A();
$a->date;
您会收到错误消息
PHP Fatal error: Uncaught Error: Typed property A::$date must not be accessed before initialization
这意味着属性$date
不会自动用null
初始化,即使这是一个有效值也是如此。您必须像public ?DateTime $date = null;
一样直接对其进行初始化,或者使用构造函数来进行初始化。