2016-09-08 7 views
2

を使用してVARを連結するこんにちは、私はこのコード$node->field['un']を持っていますが、その文は、多くの時間を繰り返して、私はこれをしたい:どのようにPHP

$varstring="value"; 
node->$varstring['un']; 

しかし、私は、私は交換してくださいどのようにカント、それを行うカントfield for my var $varstringfield$varstringに置き換えたいと思います。

私を助けてもらえますか?

+0

$ node-> {$ varstring} ['un']; ' – nogad

+0

' $ var '= $ node-> field'を作成し、 '$ var [' un ']'にアクセスするだけです。私にとってはよりクリーンなソリューションのようだ。 – Devon

答えて

4

PHP 7を使用している場合、$node->$varstring['un']は期待通りに動作します。 PHP 7より前には、このような評価順序を強制するために中括弧を使用する必要があります。それ以外の場合は、PHP5ではと解釈され、$varstringが配列であるとし、その配列に'un'というキーを見つけようとします値は$nodeに戻ります。ここで

は一例であり、PHP 5で間違った方法

7. PHP 5とPHPの間の違い

あなたは両方のPHP 5で

 
PHP Warning: Illegal string offset 'un' in /tmp/test.php code on line 9 

Warning: Illegal string offset 'un' in /tmp/test.php code on line 9 
array(1) { 
    ["un"]=> 
    string(4) "a.un" 
} 

右ウェイを取得PHP 5では
$node = new stdClass; 
$node->a = ["un" => "a.un"]; 
$node->b = ["un" => "b.un"]; 
$node->c = ["un" => "c.un"]; 

$varstring = "a"; 

var_dump($node->$varstring['un']); 

ですPHP 7

$node = new stdClass; 
$node->a = ["un" => "a.un"]; 
$node->b = ["un" => "b.un"]; 
$node->c = ["un" => "c.un"]; 

$varstring = "a"; 

var_dump($node->{$varstring}['un']); 

PHP 5や7では、あなたが

あなたの場合PHP 7の準備

 
string(4) "a.un" 

を得るだけ

$node = new stdClass; 
$node->a = ["un" => "a.un"]; 
$node->b = ["un" => "b.un"]; 
$node->c = ["un" => "c.un"]; 

$varstring = "a"; 

var_dump($node->$varstring['un']); 

PHP 7でPHP 7に

 
string(4) "a.un" 

右の方法を取得しますPHP 5との下位互換性を維持しているカッコを使用し、PHP 7(フォワード互換)で同じ動作を続けます。だから PHP 5のための既存のコードを確実に準備する必要があります。PHP 5は今から長い道のりではありません(、多分1年に2回、)。

これについてもう少し詳しくお知りになりたい場合は、Uniform Variable Syntaxという構文を使用してください。簡単に言えば、これを覚えるのが最も簡単な方法は、PHP 7での変数式がすべてからであるのに対し、PHP5ではここでの例のようにいくつかの矛盾がありました()右の他の部分は右から左へ)。