从两个类中的任何一个对对象执行var_dump都会得到相同的结果
Class Node{
public $parent = null;
public $right = null;
public $left = null;
function __construct($data){
$this->data = $data;
}
}
Class Node{
public $parent;
public $right;
public $left;
function __construct($data){
$this->data = $data;
}
}
例如
$a = new Node(2);
var_dump($a);
对于上述任何一个类,返回以下内容
object(Node)#1 (4) {
["parent"]=>
NULL
["right"]=>
NULL
["left"]=>
NULL
["data"]=>
int(2)
}
变量似乎不是这样。
$b;
var_dump($b);
如果你打算让属性的值为null
,是否需要明确写出,因为php似乎是自动为你做的?
另外 - 根据这个答案https://stackoverflow.com/a/6033090/784637,如果你试图获得未初始化变量的值,C ++会给出未定义的行为。如果该属性未初始化为值,C ++会自动将类中的属性值设置为null
吗?
答案 0 :(得分:2)
不,没有必要将它们初始化为null
- PHP会自动执行此操作并自行执行此操作不会产生任何可观察到的差异。
C ++不会将类字段的值设置为null
(除非你在C ++ 11中计算nullptr
,否则C ++中实际上没有“真正的”null
值;它零初始化或值初始化它们,这是不一样的。您可以阅读零和值初始化here。
答案 1 :(得分:2)
保存自己的按键;无需将属性的初始值设置为null。在PHP内部AFAIK中,如果未明确设置属性,则已将属性指定为null;你的var_dump证明了这一点。类属性不被认为与PHP中的原始变量相同,因此var_dump结果的差异。
然而,这样做似乎并没有伤害任何东西。我曾经在我的Doctrine实体类中将它们设置为null,并且它在实体的生命周期的任何阶段都没有区别。
答案 2 :(得分:0)
不,在PHP中没有未定义的东西,所以如果你不用null初始化它也是一样的。有些人习惯于使用其他编程语言,或者只是为了确保编写,但没有区别。
C ++非常不同,但我没有足够的知识给你答案。