2011-06-27 8 views
0

私は 'item-> anotheritem'という文字列を持っていますPHPで複数のダイナミックオブジェクトリファレンスを作成するには?

これをダイナミック変数として使いたいと思います。これは可能ですか? は、例えば:

$string = 'item->anotheritem'; 
$obj->$string; 

最終的には、以下で終わるしようとしているが、それを好きしていないようです。任意のアイデア?:

$object->item->anotheritem; 

コードの最初のブロックではPHPバージョン5.3.2

答えて

0

を使用して、あなたが変数$文字列に文字列として変数名を解析しようとしていますか? 2番目のコードで実行しようとしているものと一致しません。

+0

これはどうでしょうか? – Jenski

0

これを行うには2通りの方法があります。まず、手動で文字列を分割し、オブジェクト上の各要素を評価したり、2番目にPHPのeval()関数を使用することができます。私は後者はお勧めしませんが、非常に恐怖の観点からです。これらの2つのメカニズムは次のようになります。

<?php 
// Get some test data... 
$obj = new stdClass; 
$obj->item = new stdClass; 
$obj->item->anotheritem = "Goal!"; 
$string = 'item->anotheritem'; 

// Method #1 
$target = $obj; 
$parts = explode('->', $string); 
foreach ($parts as $part) { 
    $target = $target->{$part}; 
} 
var_dump($target); 

// Method #2 -- Avoid like the plague! ;) 
$target2 = eval('return $obj->item->anotheritem;'); 
var_dump($target2); 
関連する問題