0

fooに属するクラスがありbarます。

私が持ってfooいる:

public function bar(){
    return $this->belongsTo('App\Models\Bar');
}

のオブジェクトが$fooありbar_idますnull

Fooに、if ステートメントがあります。

if ($this->bar->id == 1){ echo "in if"; }

驚くことではありませんが、Trying to get property of non-objectエラーが発生しました。そこで、 への呼び出しを追加しましたisset。しかし、if は常に false であるため、if 内のコードは評価されません。私の新しい場合は次のようになります。

if(isset($this->bar) && $this->bar->id == 1){ echo "in if"; }

を設定した後、bar_idまだ には入っていませんif。しようとするprint bar_idと、値がnullではないことがわかります。なぜ私はこれに入らないのですか?

4

2 に答える 2

2

より安全なチェックを行うことができます:

if($this->bar instanceof \App\Models\Bar) {
    echo 'in if';
}

これにより、barプロパティが設定され、対応するリレーションがインスタンス化されているかどうかがチェックされます。

于 2015-09-25T18:17:05.633 に答える
0

私はついにそれを理解しました。どうやらisset動的関数を呼び出していません。つまり、値がロードされないことを意味します。つまり、まだnull. それを回避するために、次のことを行いました。

$bar = $this->bar();
if (isset($this-> bar) && $this->bar->id == 1) { echo "in if"; }

isset関数に到達する前に $this->bar() を呼び出しているためisset、プロパティをチェックすると が返されますTrue

于 2015-09-25T18:02:03.503 に答える