17

我在代码中发现了这个,它是什么意思,它和普通的 $dir 变量有什么区别?

global ${$dir};

$this->{$dir} = new $class();
4

4 回答 4

40

它被称为复杂的卷曲语法。

任何具有字符串表示的标量变量、数组元素或对象属性都可以通过此语法包含在内。只需将表达式写成与它出现在字符串之外的相同方式,然后将其包装在 { 和 } 中。由于 { 无法转义,因此只有在 $ 紧跟 { 时才能识别此语法。使用 {\$ 获取文字 {$。

更多信息:

http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

于 2012-11-30T20:28:59.810 回答
13

它正在获取$dir变量的值并找到具有该名称的变量。

所以 if $dir = 'foo';, then${$dir}与 相同$foo

同样,如果$dir = 'foo';,则$this->{$dir}与 相同$this->foo

http://www.php.net/manual/en/language.variables.variable.php

于 2012-11-30T20:29:26.203 回答
1

它们用于包装变量变量的名称。

于 2012-11-30T20:30:30.327 回答
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
}
于 2012-11-30T21:05:49.743 回答