4

对来自两个类中的任何一个的对象执行 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++ 是否会自动将类中属性的值设置为nullphp 的方式?

4

3 回答 3

2

不,不需要将它们初始化为null——PHP 会自动执行此操作,并且您自己执行不会产生任何明显的差异。

C++ 不会将类字段的值设置为null(C++ 中实际上没有“真实”null值,除非您nullptr在 C++ 11 中计算);它对它们进行零初始化值初始化,这是不一样的。您可以在此处阅读有关零初始化和值初始化的信息。

于 2013-01-14T01:14:17.537 回答
2

为自己节省击键;无需将属性的初始值设置为 null。在 PHP 内部 AFAIK 中,如果您没有明确设置属性,则属性已经分配为 null;你的 var_dump 证明了这一点。类属性与 PHP 中的原始变量不同,因此您的 var_dump 结果会有所不同。

但是,这样做似乎并没有什么害处。我曾经在我的 Doctrine 实体类中将它们设置为 null,它在实体生命周期的任何阶段都没有区别。

于 2013-01-14T01:59:22.400 回答
0

不,在 PHP 中没有 undefined 之类的东西,所以如果你不使用 null 初始化也是一样的。有些人已经习惯了其他编程语言,或者只是为了确保而编写它,但没有区别。

C++ 非常不同,但我没有足够的知识来给你一个答案。

于 2013-01-14T01:14:27.613 回答