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その名前の変数を見つけます。

したがって、$dir = 'foo';、 then${$dir}は と同じ$fooです。

同様に、 if $dir = 'foo';、 then$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 に答える