因此我可以安全地重构所有实例吗
class Blah
{
// ...
private $foo = null;
// ...
}
到
class Blah
{
// ...
private $foo;
// ...
}
?
因此我可以安全地重构所有实例吗
class Blah
{
// ...
private $foo = null;
// ...
}
到
class Blah
{
// ...
private $foo;
// ...
}
?
简单的回答,是的。见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 添加了类型化属性,默认情况下它不像非类型化属性那样默认为null
默认状态,而是默认为特殊的“未初始化”状态,如果在写入之前读取该属性将导致错误。请参阅PHP 文档中的“类型声明”部分了解 properties。
属性默认值为 null 是否与无默认值相同?
特殊
NULL
值表示没有值的变量。
null
是尚未设置为任何特定值的变量的概念。区分null
和空1值时相对容易出错。
private $foo = null;
完全等价于private $foo;
。在这两种情况下,类属性的值都定义为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;
你会得到错误
PHP Fatal error: Uncaught Error: Typed property A::$date must not be accessed before initialization
这意味着即使这是一个有效值,该属性$date
也不会自动初始化。null
您必须像初始化它一样直接初始化它public ?DateTime $date = null;
或使用构造函数来这样做。