2017-02-12 6 views
0

私はプロパティが定義されていないオブジェクトを持っていますが、以下のチェックのどれもがnullであるオブジェクトに有利なものはありません。phpオブジェクトはいつnullですか?

nullとして割り当てると、オブジェクトはnullのみです。私はいくつか試してみて、他の選択肢を探しましたが、どちらも、オブジェクトがむしろ反対のヌルであることを伝えていません。では、オブジェクトがnullかどうか、または以下のすべてがfalseであるかどうかをどうやって調べるのでしょうか?

プロパティが設定されていなくても保持されるため、オブジェクトはnullになりません。それはあなたを助けている場合

class LinkedList implements DataStructure { 


    public $head; 

    public function __construct(){ 
     $this->head = new Node; 
     $this->tail = new Node; 

     //checking all posibilities i am aware of 
     echo "are you an object ? ".gettype($this->head); 

     echo "<br/>are you null ? ".is_null($this->head); 
     echo "<br/>are you empty ? ".empty($this->head); 
     echo "<br/>are you null ? ". ($this->head === null); 
     echo "<br/>what is your count ? ".count($this->head); 
     echo "<br/>maybe you are not set ? ".isset($this->head); 

    } 
} 

これはみんなが助けて...私のNodeクラスである私

class Node { 

    public $next; 
    public $file; 
    public $folder; 
    public $parentDirectory; 

} 

上記のコードの出力は次のようになります。また、

are you an object ? object 
are you null ? 
are you empty ? 
are you null ? 
what is your count ? 1 
maybe you are not set ? 1 

var_dump($this->head)戻り、この

object(App\Library\DataStructures\Node)#202 (4) { 

    ["next"]=> 
    NULL 

    ["file"]=> 
    NULL 

    ["folder"]=> 
    NULL 

    ["parentDirectory"]=> 
    NULL 

} 

ありがとう。

答えて

2

は、PHPの種類を見てください: http://php.net/manual/en/language.types.php

objectは型であり、nullは別のタイプです。

$this->headobjectNodeに設定しています。それにもかかわらず、Nodeオブジェクト内で何が起こるかは、まだobjectです。

this->head = nullを設定すると、それだけがタイプnullとみなされます。

+0

ありがとうございます。しかし、そうであれば、オブジェクトが宣言されていてプロパティが定義されていないかどうかをチェックする正しい方法は何ですか? –

+0

それが '$ this-> head ===新しいNode()'であるかどうかだけを確認できます。 – zed

+0

大丈夫、ありがとう –

関連する問題