Jes*_*sse 23 php null properties default-value
因此,我可以安全地重构所有的实例
class Blah
{
// ...
private $foo = null;
// ...
}
Run Code Online (Sandbox Code Playgroud)
至
class Blah
{
// ...
private $foo;
// ...
}
Run Code Online (Sandbox Code Playgroud)
?
cry*_*c ツ 23
答案很简单,是的.见http://php.net/manual/en/language.types.null.php
特殊的NULL值表示没有值的变量.NULL是null类型唯一可能的值.
您可以通过var_dump()在属性上执行a来轻松地进行测试,您将看到它们将是两个实例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
Run Code Online (Sandbox Code Playgroud)
zzz*_*Bov 10
属性默认值null是否与默认值相同?
特殊
NULL值表示没有值的变量.
null是一个未设置为任何特定值的变量的概念.区分null和清空1值时相对容易出错.
private $foo = null;完全等同于private $foo;.在这两种情况下,class属性都定义为值null.
isset将正确返回false两个声明$foo; isset是布尔的反义is_null,并且这些值如上所述null.
作为参考,我建议查看PHP类型比较表.
1:在这种情况下,我指的是为empty函数返回true的类型值,或者其他被认为是"falsey"的值.IE null,0,false,空阵列(array()),并且空字符串('').'0'在技术上也是空的,虽然我发现它是一种奇怪的PHP作为一种语言.
除了仍然正确的公认答案之外,随着 PHP 7.4 中添加类型化属性,还有一些新的事情需要考虑。
给出以下代码
class A {
public ?DateTime $date;
}
$a = new A();
$a->date;
Run Code Online (Sandbox Code Playgroud)
你会得到错误
PHP 致命错误:未捕获错误:初始化之前不得访问类型化属性 A::$date
这意味着即使这是一个有效值,该属性$date也不会自动初始化。null您必须像直接初始化它一样public ?DateTime $date = null;或使用构造函数来执行此操作。