如何使用php连接var

时间:2016-09-08 04:48:22

标签: php variables concatenation nodes

嗨我有这段代码$node->field['un'],但这句话重复了很多次,我想这样做:

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

但我无法做到,我无法替换field我的var $varstring我想用field替换$varstring

你能帮帮我吗?

1 个答案:

答案 0 :(得分:4)

如果你正在使用PHP 7,那么$node->$varstring['un']将按预期工作。在PHP 7之前,您需要使用大括号强制执行评估顺序,如此$node->{$varstring}['un'],否则,在PHP 5中,它被读作$node->{$varstring['un']},假定$varstring是一个数组,并尝试在该数组中找到一个名为'un'的键,将结果值传回$node

以下是PHP 5和PHP 7之间的示例和差异。

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 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和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中,你得到

string(4) "a.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 7中,你得到了

string(4) "a.un"

准备PHP 7

如果您使用大括号,它仍然向后兼容PHP 5,并且仍然在PHP 7中继续工作(向前兼容)。所以你应该肯定为PHP 7准备任何现有代码,因为PHP 5将在不久之后出现在门外(可能在一两年内

语法称为Uniform Variable Syntax,以防您想要阅读更多内容。简单地说,最简单的方法就是在PHP 7中每个变量表达式从左到右读取 而在PHP 5中你有一些不一致的地方,比如你的这里的示例(某些部分从左到右,其他部分从右到左)。