2017-11-20 11 views
-1

オブジェクトのプロパティがオブジェクトに直接存在せず、静的変数を通じて定義され、$dataプロパティに格納されているオブジェクトを作成しようとしていますが、ユーザーは__get__setです。私がオブジェクトに到達するまで、うまくいきます。再帰オブジェクトの問題と、stdClassのgetterとsetterの作成にアクセスできないため、内部的にオブジェクトの値を配列として格納し、出力にキャストできます。誰かがオブジェクトのプロパティを配列の値として設定する

$fleet->car->wheels = 4; 

のような何かをするとき、残念ながら、私はすぐにその後、インナー、それが第一の外側のセット(car->wheels)を行うことを試みることを示していると思われる

Creating default object from empty value 

を取得しますか?それは私には意味がない。私にとっては、論理的にはまずcarの値を$fleetから取得してから、wheelsに設定しようとします。

私はこれについて間違って考えているのですか?これはちょうど不可能ですか?他の解決策は、getters/setterを使って値を保持するオブジェクトを作成することですが、できるだけコードを少なくしたいと思います。

この参照するには、最低コード:

class Test 
{ 
    public function __set($key, $value) { 
     var_dump($key, $value); 
    } 
} 

$test = new Test(); 
$test->car->wheels = 4; 
+0

これは興味深い質問です。 [MCVE](https://stackoverflow.com/help/mcve)を提供できます – dan08

+1

クラスコードを共有できますか –

答えて

1

これはロジックで間違いだったが。

{object}->{key1}->{key2}を設定すると、{object}->{key1}が返され、その戻り値が設定されます。だから、私が発砲していないセッターを使用しようとしていたという事実は、{key1}の値が設定されていたので当然でしたが、key1ではありませんでした。 carのための最初の新しいstdClassが作成され、その後4がwheelsに設定されているので、そう

public function __get($key) { 
    $test = new stdClass(); 
    return $test; 
} 

を追加

は、エラーを処分しました。

関連する問題