Константа класса в строке в PHP

Мое чтение руководства (бит непосредственно перед заголовком раздела «Доступ к строкам и его изменение по символу») заключается в том, что вы можете делать некоторые причудливые трюки с константами класса и {} внутри строки, но вы не можете сделать простую вещь, которая сделайте этот метод верным:

class c { const k = '12'; public function s() { return "Twelve in decimal is {c::k}."; } } 

Правильное решение здесь для конкатенации?

Правильное решение здесь для конкатенации?

Да. Расширенный курсивный синтаксис не поддерживает его.

Кроме того, вы можете экспортировать список констант в массив и использовать его (или экспортировать константу в одно имя скалярной переменной), но это не очень хорошее решение IMO.

Обратите внимание, что константы доступны, так как вы можете сделать это:

 const k = 'foo'; $foo = 'bar'; echo "{${c::k}}" 

давая вам bar , но это не то, что вы хотите.

Кудрявый синтаксис работает только для «переменных выражений». И вам нужно все, с чем вы можете получить доступ с помощью {$ .

О, есть только это обходное решение:

  $c = "constant"; return "Twelve in decimal is {$c('c::k')}."; 

Это, очевидно, не намного короче или читабельнее, чем просто использование конкатенации здесь.

Это немного загадочно, но в руководстве есть примечание.

Функции, вызовы методов, статические переменные класса и константы класса внутри {$} работают с PHP 5. Однако доступное значение будет интерпретироваться как имя переменной в области, в которой определена строка. Использование отдельных фигурных скобок ({}) не будет работать для доступа к возвращаемым значениям функций или методов или значений констант класса или переменных статического класса.

Последнее предложение говорит вам, что это не сработает, да, конкатенация – это путь сюда .

(изменено) Пример вышеприведенного параграфа:

 <?php class beers { const softdrink = 'rootbeer'; } $rootbeer = 'A & W'; // This works; outputs: I'd like an A & W echo "I'd like an {${beers::softdrink}}\n"; // This won't work; outputs: I'd like an {beers::softdrink} echo "I'd like an {beers::softdrink}\n";