PHP,$ this-> {$ var} - 这是什么意思?

时间:2013-05-06 22:04:33

标签: php codeigniter

我遇到了访问/更改变量的需要:

$this->{$var}

上下文是CI数据映射器获取规则。我似乎无法找到这种语法实际上做了什么。 {' s在这种情况下做了什么?为什么不呢:

$this->var

谢谢!

2 个答案:

答案 0 :(得分:40)

这是变量,这样您最终会得到$this->{value-of-$val}

请参阅:http://php.net/manual/en/language.variables.variable.php

例如:

$this->a = "hello";
$this->b = "hi";
$this->val = "howdy";

$val = "a";
echo $this->{$val}; // outputs "hello"

$val = "b";
echo $this->{$val}; // outputs "hi"

echo $this->val; // outputs "howdy"

echo $this->{"val"}; // also outputs "howdy"

工作示例:http://3v4l.org/QNds9

这当然是在课堂环境中工作。您可以在本地上下文中使用变量变量,就像这样:

$a = "hello";
$b = "hi";

$val = "a";
echo $$val; // outputs "hello"

$val = "b";
echo $$val; // outputs "hi"

工作示例:http://3v4l.org/n16sk

答案 1 :(得分:9)

首先,$this->{$var}$this->var是两个非常不同的东西。后者将请求var类变量,而另一个将请求$var字符串中包含的变量的名称。如果$var是字符串'foo',那么它将请求$this->foo,依此类推。

这对于动态编程非常有用(当您仅在运行时知道变量的名称时)。但是字符串上下文中的经典{}符号非常强大,尤其是当您有奇怪的变量名时:

${'y - x'} = 'Ok';
$var = 'y - x';
echo ${$var};  
即使变量名Ok因空格和y - x字符无效,

也会打印-