2010-10-29 69 views
4

PHP支持這一點:爲什麼PHP不支持在字符串中使用const擴展const?

$z = 5; 
$str = "z is $z"; // result: "z is 5" 

,並支持這一點:

$c = new StdClass(); 
$c->x = 9; 
$str = "x is {$c->x}"; // result: "x is 9" 

,但它不支持這一點:

class abc 
{ 
    const n = 2; 
} 
$str = "x is {abc::n}"; // result: "x is {abc::n}" 

爲什麼PHP 通過consts不支持插入花括號語法?似乎它應該...

+0

PHP tokenizer在雙引號中查找'$'。變量是字符串中的主要插值目標,而不是表達式。而'{'只是變量周圍的語法糖,但實際上並不應該在字符串中開始複雜的解釋。它有時被巧妙地濫用來做到這一點,但它確實只適用於變量。這就是爲什麼{常量}不被支持。 – mario 2010-10-29 16:00:57

回答

6

卷積語法是擴展的變量語法。它用於將變量插入到字符串中。而在PHP中,變量以$開頭,其他所有內容都會產生語法錯誤。

但是你可以做的是調用變量函數。因此,你可以這樣做:

$_ = function ($expr) { return $expr; }; 

echo "Something {$_(Class::Constant)}"; 

但這是一個通常不合適的黑客攻擊。相反,請使用字符串連接:

echo 'Something ' . Class::Constant; 
+0

真不錯!我會考慮這在PHP 5.3 – 2010-10-29 15:46:14

+1

更好:'_ _ =「htmlspecialchars」;'更普遍地工作。 – mario 2010-10-29 15:54:45

相關問題