Php null的属性默认值是否与无默认值相同?
因此,我可以安全地重构Php null的属性默认值是否与无默认值相同?,php,properties,null,default-value,Php,Properties,Null,Default Value,因此,我可以安全地重构 class Blah { // ... private $foo = null; // ... } 到 ?非类型属性 答案很简单,是的。看 特殊的NULL值表示没有值的变量。空是 类型为null的唯一可能值 您可以通过对属性执行var\u dump()来轻松测试,您将看到这两个实例都是NULL class Blah1 { private $foo; function test() { var_dump($
class Blah
{
// ...
private $foo = null;
// ...
}
到
?非类型属性
答案很简单,是的。看
特殊的NULL值表示没有值的变量。空是
类型为null的唯一可能值
您可以通过对属性执行var\u 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
,而是默认为特殊的“未初始化”状态,如果在写入属性之前读取该属性,则会导致错误。请参阅上的“类型声明”部分
null的属性默认值是否与无默认值相同
对
特殊的NULL
值表示没有值的变量
null
是未设置为任何特定值的变量的概念。在区分null
和empty1值时,相对容易出错
private$foo=null
完全等同于私有$foo代码>。在这两种情况下,class属性的值都是null
isset
将为$foo
的两个声明正确返回false
isset
是与is_null
相对的布尔值,如上所述,这些值是null
为了便于参考,我建议查看
1:在本例中,我指的是为函数返回true的类型化值,或者被认为是“false”的类型化值。即null
、0
、false
、空数组(array()
)和空字符串('
)<代码> '0' 在技术上也是空的,虽然我发现它是PHP的一种奇特的语言。 < P>除了所接受的答案仍然是真的,在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编码>或使用构造函数执行此操作。还请注意,使用错误报告(E|u ALL | E|u STRICT)代码>不能用$var
,但您可以通过public$var代码>(或受保护或私有)。我认为错误报告与此无关。文档从来没有显示过这样一种定义属性的方法在任何情况下都是有效的。谢谢!我认为现在公认的答案是不正确的,因为它只适用于非类型属性。正确答案应该包括类型化和非类型化属性,因为问题没有指定。
PHP Fatal error: Uncaught Error: Typed property A::$date must not be accessed before initialization