如果php自动为您执行此操作,是否需要将类中的属性初始化为null?

时间:2013-01-14 01:11:17

标签: php

从两个类中的任何一个对对象执行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吗?

3 个答案:

答案 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 ++非常不同,但我没有足够的知识给你答案。