我曾经遇到过需要访问/修改变量这样:
$this->{$var}
的背景是与CI DataMapper的获取规则。我似乎无法找到这个语法实际上做了什么。 {在这方面做什么?为什么不只是:
$this->var
谢谢!
我曾经遇到过需要访问/修改变量这样:
$this->{$var}
的背景是与CI DataMapper的获取规则。我似乎无法找到这个语法实际上做了什么。 {在这方面做什么?为什么不只是:
$this->var
谢谢!
这是一个变量变量,这样你将以$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"
当然,这是一类环境中工作。你可以在当地的环境很容易地使用可变的变量是这样的:
$a = "hello";
$b = "hi";
$val = "a";
echo $$val; // outputs "hello"
$val = "b";
echo $$val; // outputs "hi"
的所有$this->{$var}
和$this->var
是两个完全不同的事情首先。后者将请求var
类变量,而另一个将请求包含在$var
字符串中的变量的名称。如果$var
是字符串'foo'
那么它将请求$this->foo
等。
这对于动态编程(只有在运行时才知道变量的名称)很有用。
${'y - x'} = 'Ok';
$var = 'y - x';
echo ${$var};
将打印Ok
即使变量名y - x
是因为空间和-
字符无效:但是,尤其是当你有奇怪的变量名的经典{}
符号在字符串上下文中是非常强大的。
+1!我从来不知道变量名称可能很复杂。那么,你可以把一个数组/对象作为变量名吗? – 2013-05-07 01:21:23
@DaveChen,他们的字符串表示是。虽然我认为变量名称有一个长度限制。我认为这不是一种好的做法,因此我会避免它。 – Shoe 2013-05-07 03:11:24
hmm'$ object-> attr' ='$ object - > {“attr”}':) – 2013-05-06 22:08:13
@DaveChen用这个例子更新了我的答案 – jszobody 2013-05-06 22:22:24
我记得我刚开始的时候, $ this - > $ val'并失败了。很高兴看到这个答案。 – 2013-05-06 22:24:14