【问题标题】:How to concatenate a var with using php如何使用 php 连接 var
【发布时间】:2017-01-15 21:43:11
【问题描述】:

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

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

但我做不到,我怎么不能用 $varstring 替换 field 为我的 var $varstring 我想用 $varstring 替换 field

你能帮帮我吗?

【问题讨论】:

  • $node->{$varstring}['un'];
  • 您可以创建一个引用$var &= $node->field,然后访问$var['un']。对我来说似乎是一个更清洁的解决方案。

标签: php variables concatenation nodes


【解决方案1】:

如果您使用的是 PHP 7,那么 $node->$varstring['un'] 将按您的预期工作。在 PHP 7 之前,您需要使用大括号来强制像 $node->{$varstring}['un'] 这样的评估顺序,否则,在 PHP 5 中,它被读取为 $node->{$varstring['un']},它假定 $varstring 是一个数组,并尝试找到一个名为 @987654326 的键@ 在该数组中将结果值交还给$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”

仅 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 中你会得到

字符串(4)“a.un”

准备 PHP 7

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

语法称为Uniform Variable Syntax,以防您想进一步了解它。简而言之,记住这一点的最简单方法是,在 PHP 7 中 每个 变量表达式都是从 从左到右 读取的,而在 PHP 5 中,您有一些不一致的地方,例如您的此处的示例(某些部分从左到右,其他部分从右到左)。

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 2015-03-20
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多