我理解字符串中复杂(卷曲)语法的用法,但我不理解它在字符串之外的用途。
我刚在CakePHP中找到了这个代码,我无法理解:
// $class is a string containg a class name
${$class} =& new $class($settings);
如果有人能帮助我理解为什么在这里使用,这和它之间有什么区别:
$class =& new $class($settings);
谢谢。
答案 0 :(得分: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
仍然只是一个字符串。
答案 1 :(得分:2)
在字符串之外使用复杂(卷曲)语法的示例是在表达式中形成变量名称时,不仅包含一个变量。请考虑以下代码:
$first_name="John";
$last_name="Doe";
$array=['first','last'];
foreach ($array as $element) {
echo ${$element.'_name'}.' ';
}
在上面的代码中,echo语句将在第一个循环期间输出变量$ first_name的值,并在第二个循环期间输出变量$ last_name的值。如果要删除大括号,echo语句将尝试在第一个循环期间输出变量$ first的值,并在第二个循环期间输出变量$ last的值。但由于未定义这些变量,代码将返回错误。
答案 2 :(得分:0)
第一个示例创建一个动态命名的变量(name是类变量的值),另一个示例覆盖类变量的值。