2013-01-09 22 views
5

我理解字符串中複雜(捲曲)語法的用法,但我不明白它是字符串之外的用途。字符串表示之外的複雜(捲曲)語法的用途

我剛剛發現在CakePHP的這個代碼,我無法理解:

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

如果有人能幫助我理解爲什麼在這裏使用,而這也正是這之間的區別:

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

謝謝。

+1

它也可以是'$$ class'。檢查[關於這個特定案例的文檔](http://php.net/manual/en/language.variables.variable.php)。 – inhan

+0

+1,是變量變量,我只是忘記了它們可以用作$ {}。謝謝 –

回答

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仍然只是一個字符串。

+0

我知道'變量',但我忘了你可以使用這種形式,我只用它們與$$。謝謝,現在已經很清楚了。 –

0

第一個示例創建一個動態命名的變量(名稱是類變量的值),另一個示例覆蓋類變量的值。明白這一點

2

一個在字符串之外使用複雜(捲曲)語法將是必要的示例是從表達式中構建一個變量名稱,其中包含多個變量。考慮下面的代碼:

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

在回波語句上面的代碼將輸出變量$如first_name的第一循環期間的值,變量$姓氏的第二循環期間的值。如果要刪除大括號,echo語句會嘗試輸出第一個循環中變量$ first的值和第二個循環中變量$ last的值。但是由於這些變量沒有定義,代碼會返回一個錯誤。