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

use*_*484 21 php codeigniter

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

$this->{$var}
Run Code Online (Sandbox Code Playgroud)

上下文是使用CI datamapper获取规则.我似乎无法找到这种语法实际上做了什么.{在这方面做了什么?为什么不呢:

$this->var
Run Code Online (Sandbox Code Playgroud)

谢谢!

jsz*_*ody 43

这是一个变量变量,这样你最终会得到$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"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

$val = "b";
echo $$val; // outputs "hi"
Run Code Online (Sandbox Code Playgroud)

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

  • 嗯`$ object-> attr` =`$ object - > {"attr"}`:) (6认同)
  • 值得一提的是多个`$`.给出以下代码`$ foo = 1; $ bar ="foo"`,`$$ bar`是1. (3认同)
  • 我记得当我开始的时候,我试图做一些像`$ this - > $ val`这样的事情并且失败了.很高兴看到这个答案. (2认同)

Sho*_*hoe 10

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

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

${'y - x'} = 'Ok';
$var = 'y - x';
echo ${$var};  
Run Code Online (Sandbox Code Playgroud)

Ok即使变量名y - x因空格和-字符无效,也会打印.

  • 也为您+1!我从来不知道变量名可能是如此复杂。那么,您可以将数组/对象作为变量名吗? (2认同)
  • @DaveChen,它们的字符串表示形式是。尽管我认为变量名有长度限制。我认为这不是一个好的做法,因此我会避免这样做。 (2认同)