2017-03-25 9 views
2

私は本当に混乱しています。 プロパティが存在するかどうかをチェックすると、falseが返されます。プロパティは存在しますが、property_exists()はfalseを返します。

if (property_exists($pais, 'id')) 
// false 

しかし、私がそれをデバッグすると私にそれが表示されます。

print_r($pais->id); 
// 1 
print_r(property_exists($pais, 'id')); 
// false 

私は狂ったまたは私のニューロンはちょうど揚げですか?

とPAISの作成は、私はあなたがLaravelを使用している参照

if (key_exists('country', $data)) 
    $pais = Pais::adicionarPais($data); 

(...) 

public static function adicionarPais(array $data) 
{ 
    return Pais::firstOrCreate(['nome' => $data['country']]); 
} 
+0

'$ pais'のコンテキストは何ですか?それは標準オブジェクトかスタティックオブジェクトですか? –

+0

@RobertDeBoer iv詳細情報を更新しました。 –

答えて

4

によって行われますので、私はこれが雄弁モデルですね。彼らはおそらくデータベースの列から動的なプロパティとメソッドを作成するために魔法のメソッドを使用しています。ここをクリックしてください:http://php.net/manual/en/language.oop5.overloading.php

実際のプロパティを持つ代わりに、プロパティを要求するたびに、列や関係があるかどうかを確認し、代わりにそれを返します。

あなたのモデルはあなたが配列にモデルを変換しarray_key_existsを使用することができますgetAttributes()方法(https://github.com/illuminate/database/blob/master/Eloquent/Concerns/HasAttributes.php#L851

class Pais 
{ 
    public function __get($name) { 
     if ($name == 'id') { 
      return 1; 
     } 
    } 
} 
$pais = new Pais(); 
var_dump($pais->id); // int(1) 
var_dump(property_exists($pais, 'id')); // bool(false) 
+0

PHPドキュメントによると、これは当てはまりますが、これは動作しません。 property_existsは、マジック関数によって作成されたプロパティでは機能しません。 –

+0

正確です。これが$ pais-> idが1を返し、property_existsがfalseを返す理由です。 – fedeisas

+0

はい私はlaravelを使用しています..しかし、もし私がその__getをオーバーライドすれば、雄弁は働きを止めて、すべての関係を混乱させます。 –

0

と属性を取得することができます。奇妙なオブジェクトのプロパティは魔方法で設定されているので、特にプロパティが実際に存在するがnullに設定されている場合、property_existsは機能しません。

例:

$pais = Pais::find(1); 

if (array_key_exists('country', $pais->toArray())) { 
    // do stuff 
} 

は、モデル上のtoArrayの使用を注意してください。

関連する問題