我在代码中发现了这个,它是什么意思,它和普通的$ dir变量有什么区别?
global ${$dir};
$this->{$dir} = new $class();
答案 0 :(得分:40)
它称为复杂的卷曲语法。
带字符串的任何标量变量,数组元素或对象属性 可以通过此语法包含表示。简单地写一下 表达式与字符串外部的表达方式相同,并且 然后将其包装在{和}中。由于{无法转义,因此将使用此语法 只有当$紧跟{时才会被识别。使用{\ $ to 得到一个文字{$。
更多信息:
http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex
答案 1 :(得分:13)
它取$dir
变量的值并找到具有该名称的变量。
因此,如果$dir = 'foo';
,则${$dir}
与$foo
相同。
同样,如果$dir = 'foo';
,则$this->{$dir}
与$this->foo
相同。
http://www.php.net/manual/en/language.variables.variable.php
答案 2 :(得分:1)
它们用于包装变量变量的名称。
答案 3 :(得分:1)
动态创建的变量。例如:
$app = new App();
$app->someMethod('MyDB');
// global
$config = array('user' => 'mark', 'pass' => '*****');
class App {
// MyDB instance
protected $config;
public function someMethod($class) {
$dir = 'config';
// $config = array('user' => 'mark', 'pass' => '*****')
global ${$dir};
// not static variable !!!
$this->{$dir} = new $class();
}
}
class MyDB {
// body
}