因此我可以安全地重构所有实例吗
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的两个声明 是 的相反布尔值,并且这些值是,如上所述,。$fooissetis_nullnull
作为参考,我建议查看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;或使用构造函数来这样做。