如何使用php连接一个变量


How to concatenate a var with using php

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

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

但是我不能这样做,我怎么能代替field为我的var $varstring我想用$varstring代替field

如果您使用PHP 7,那么$node->$varstring['un']将像您期望的那样工作。在php7之前,你需要使用大括号来强制像$node->{$varstring}['un']这样的求值顺序,否则,在php5中,它被读为$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警告:第9行/tmp/test.php代码中的非法字符串偏移'un'警告:第9行/tmp/test.php代码中的非法字符串偏移'un'数组(1){["联合国"]=>字符串(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中得到

<>之前字符串(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中得到

<>之前字符串(4)"a.un"之前

准备PHP 7

如果您使用大括号,它仍然与PHP 5向后兼容,并且在PHP 7中仍然继续工作(向前兼容)。所以你应该为PHP 7准备好现有的代码,因为PHP 5很快就要发布了(可能在一两年)。

这种语法被称为统一变量语法,如果你想进一步了解它的话。简单地说,记住这一点的最简单方法是,在PHP 7中每个变量表达式都是从左到右读取,而在PHP 5中,您有一些不一致的地方,就像这里的例子(部分从左到右其他部分从右到左)。