4

2つのクラスのいずれかからのオブジェクトに対して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 ++はクラスフィールドの値をに設定しません( C ++ 11でカウントしない限り、C ++nullには実際には「実際の」値はありません)。それらをゼロ初期化または値初期化しますが、これは同じではありません。ゼロ初期化と値初期化については、ここで読むことができます。nullnullptr

于 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には未定義のようなものはないので、nullで初期化しない場合も同じです。他のプログラミング言語に慣れている人もいれば、念のために書いている人もいますが、違いはありません。

C ++は非常に異なりますが、それについて答えるのに十分な知識がありません。

于 2013-01-14T01:14:27.613 に答える