我在代码中发现了这个,它是什么意思,它和普通的 $dir 变量有什么区别?
global ${$dir};
$this->{$dir} = new $class();
它被称为复杂的卷曲语法。
任何具有字符串表示的标量变量、数组元素或对象属性都可以通过此语法包含在内。只需将表达式写成与它出现在字符串之外的相同方式,然后将其包装在 { 和 } 中。由于 { 无法转义,因此只有在 $ 紧跟 { 时才能识别此语法。使用 {\$ 获取文字 {$。
更多信息:
http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex
它正在获取$dir
变量的值并找到具有该名称的变量。
所以 if $dir = 'foo';
, then${$dir}
与 相同$foo
。
同样,如果$dir = 'foo';
,则$this->{$dir}
与 相同$this->foo
。
http://www.php.net/manual/en/language.variables.variable.php
它们用于包装变量变量的名称。
动态创建的变量。例如:
$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
}