2016-06-28 15 views
1

「ドット表記」文字列を使用してオブジェクトのネストされたプロパティにアクセスする簡単な方法は何ですか?例えばPHP:ドット表記によるネストされたオブジェクトのプロパティへのアクセス

#..........................Classes.......................... 

class Colour   | class Eye  | class Person 
{      | {    | { 
    $hexValue = #36ff00 |  $colour; |  $eyes; 
}      | }    | } 

#..........................Example.......................... 

$john = new Person; 

$eyes = [new Eye, new Eye]; 

$eyes[0]->color = new Colour; 

$eyes[1]->color = new Colour; 

$john->eyes = [new Eye, new Eye]; 

#..........................Question.......................... 

# How can we do something like this? 

$eyeColour = Helper::dot($john, 'eyes[0].colour.hexValue'); 
+0

同じ方向:http://stackoverflow.com/q/38087608/3933332尋ねられたのは15分前です。また、いくつかのアイデアを得るためにコメントを参照してください。 – Rizier123

+0

これは配列アクセスのためのもので、配列ドットアクセスを扱う多数の例とパッケージがあります。オブジェクト/クラスインスタンスはありません。 – AndrewMcLagan

答えて

3

これを行うには簡単な方法はありません。あなたは、パス文字列を解析して、ステップバイステップで目的の値に到達する必要があります。

チェックアウトSymfony PropertyAccess Component。これは、フレームワークの残りの部分がないスタンドアロンのライブラリとして使用できます。

use Symfony\Component\PropertyAccess\PropertyAccess; 

$accessor = PropertyAccess::createPropertyAccessor(); 

$eyeColour = $accessor->getValue($john, 'eyes[0].colour.hexValue'); 
+0

パーフェクト、私は実際に過去にこの図書館に出くわしました。 1つの例の上にライブラリの使用のための+1。 – AndrewMcLagan

関連する問題