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ではここでの例のようにいくつかの矛盾がありました()右の他の部分は右から左へ)。
$ node-> {$ varstring} ['un']; ' – nogad
' $ var '= $ node-> field'を作成し、 '$ var [' un ']'にアクセスするだけです。私にとってはよりクリーンなソリューションのようだ。 – Devon