2010-10-29 5 views
4

PHP поддерживает это:Почему PHP не поддерживает вставное расширение констант в строке?

$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-токенизатор ищет '$' в двойных кавычках. Переменные являются основной целью интерполяции в строках, а не выражениями. И '{' является просто синтаксическим сахаром вокруг переменных, но на самом деле не предполагается начинать сложную интерпретацию внутри строк. Иногда это умно используется неправильно, но оно действительно предназначено только для переменных. Вот почему {константы} не поддерживаются. – mario

ответ

6

Кудрявый синтаксис - это расширенный переменная синтаксис. Он используется для интерполяции переменных в строки. И, как и в PHP-переменных, начиная с $, все остальное даст синтаксическую ошибку.

Но что вы можете сделать, это вызвать переменные функции. Таким образом, вы можете:

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

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

Но это хак, который обычно не подходит. Вместо этого используйте конкатенацию строк:

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

очень приятно! Я бы подумал об этом на php 5.3 –

+1

Еще лучше: '$ _ =" htmlspecialchars ";' который работает более универсально. – mario