复杂(花括号)语法在字符串表示之外的目的是什么?

5

我理解字符串内使用复杂(花括号)语法的用法,但我不明白它在字符串外的目的。

我刚刚在CakePHP中发现了这段代码,我无法理解:

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

如果有人能帮我理解这里为什么使用“why”,以及这与以下内容的区别是什么:
$class =& new $class($settings);

谢谢。

1
它也可能是$$class。请查看有关此非常特定情况的文档 - inhan
+1,是的变量变量,我只是忘记了它们可以用作${}。谢谢。 - Radu Maris
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.";

在PHP中,使用${$something}$$something被称为“变量变量”。

因此,在这种情况下,创建了一个名为$FooBar的新变量,而变量$nameOfClass仍然只是一个字符串。


我知道“变量变量”,但我忘了你可以使用这种形式,我只用$$与它们。谢谢,现在一切都清楚了。 - Radu Maris

2

当从一个由不止一个变量组成的表达式中形成一个变量名时,需要使用复杂(花括号)语法。以下是一个示例:

$var1 = 'hello';
$var2 = 'world';

// 使用复杂语法创建变量名
${$var1 . $var2} = 'it works!';

echo $helloworld; // 输出 'it works!'

$first_name="John";
$last_name="Doe";
$array=['first','last'];
foreach ($array as $element) {
    echo ${$element.'_name'}.' ';
}

在上面的代码中,echo语句将在第一次循环期间输出变量$first_name的值,在第二次循环期间输出变量$last_name的值。如果删除花括号,echo语句将尝试在第一次循环期间输出变量$first的值,在第二次循环期间输出变量$last的值。但由于这些变量未定义,代码将返回错误。

0
第一个示例创建了一个动态命名的变量(名称是类变量的值),另一个则覆盖了类变量的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接