コードでこれを見つけました。それは何を意味し、それと通常の $dir 変数の違いは何ですか?
global ${$dir};
$this->{$dir} = new $class();
コードでこれを見つけました。それは何を意味し、それと通常の $dir 変数の違いは何ですか?
global ${$dir};
$this->{$dir} = new $class();
これは、複雑なカーリー構文と呼ばれます。
文字列表現を持つスカラー変数、配列要素、またはオブジェクト プロパティは、この構文を使用して含めることができます。文字列の外側に表示されるのと同じ方法で式を記述し、{ と } で囲みます。{ はエスケープできないため、この構文は { の直後に $ が続く場合にのみ認識されます。{\$ を使用して、リテラル {$ を取得します。
より詳しい情報:
http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex
変数の値を取得し、$dir
その名前の変数を見つけます。
したがって、$dir = 'foo';
、 then${$dir}
は と同じ$foo
です。
同様に、 if $dir = 'foo';
、 then$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
}