文字列内での複雑な (カーリー) 構文の使用法は理解していますが、文字列外での目的は理解していません。
理解できないCakePHPでこのコードを見つけました:
// $class is a string containg a class name
${$class} =& new $class($settings);
ここで が使用されている理由と、これと次の違いは何ですか?
$class =& new $class($settings);
ありがとうございました。
文字列内での複雑な (カーリー) 構文の使用法は理解していますが、文字列外での目的は理解していません。
理解できないCakePHPでこのコードを見つけました:
// $class is a string containg a class name
${$class} =& new $class($settings);
ここで が使用されている理由と、これと次の違いは何ですか?
$class =& new $class($settings);
ありがとうございました。
これを理解する最も簡単な方法は、例です。
class FooBar { }
// This is an ordinary string.
$nameOfClass = "FooBar";
// Make a variable called (in this case) "FooBar", which is the
// value of the variable $nameOfClass.
${$nameOfClass} = new $nameOfClass();
if(isset($FooBar))
echo "A variable called FooBar exists and its class name is " . get_class($FooBar);
else
echo "No variable called FooBar exists.";
${$something}
またはを使用し$$something
ます。PHPでは「変数変数」と呼ばれます。
したがって、この場合、と呼ばれる新しい変数$FooBar
が作成され、変数$nameOfClass
はまだ単なる文字列です。
文字列の外側で複雑な (カーリー) 構文を使用する必要がある例は、複数の変数で構成される式から変数名を形成する場合です。次のコードを検討してください。
$first_name="John";
$last_name="Doe";
$array=['first','last'];
foreach ($array as $element) {
echo ${$element.'_name'}.' ';
}
上記のコードでは、echo ステートメントは最初のループ中に変数 $first_name の値を出力し、2 番目のループ中に変数 $last_name の値を出力します。中括弧を削除すると、echo ステートメントは最初のループで変数 $first の値を出力し、2 番目のループで変数 $last の値を出力しようとします。しかし、これらの変数は定義されていないため、コードはエラーを返します。
最初の例では、動的に名前が付けられた変数(nameはクラス変数の値)を作成し、もう1つの例ではクラス変数の値を上書きします。