5

文字列内での複雑な (カーリー) 構文の使用法は理解していますが、文字列外での目的は理解していません。

理解できないCakePHPでこのコードを見つけました:

// $class is a string containg a class name
${$class} =& new $class($settings);

ここで が使用されている理由と、これと次の違いは何ですか?

$class =& new $class($settings);

ありがとうございました。

4

3 に答える 3

4

これを理解する最も簡単な方法は、例です。

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はまだ単なる文字列です。

于 2013-01-09T15:11:46.557 に答える
2

文字列の外側で複雑な (カーリー) 構文を使用する必要がある例は、複数の変数で構成される式から変数名を形成する場合です。次のコードを検討してください。

$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 の値を出力しようとします。しかし、これらの変数は定義されていないため、コードはエラーを返します。

于 2015-05-07T19:40:20.973 に答える
0

最初の例では、動的に名前が付けられた変数(nameはクラス変数の値)を作成し、もう1つの例ではクラス変数の値を上書きします。

于 2013-01-09T15:11:35.763 に答える