这是什么意思?

时间:2012-11-30 20:26:43

标签: php

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

global ${$dir};

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

4 个答案:

答案 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
}