Константа класса в строке в PHP
Мое чтение руководство (бит непосредственно перед заголовком раздела "Доступ к строкам и изменение по символу" ) заключается в том, что вы можете сделать некоторые фантастические трюки с константами класса и {} внутри строки, но вы не можете сделать простую вещь, которая заставит этот метод вернуть правду:
class c {
const k = '12';
public function s() {
return "Twelve in decimal is {c::k}.";
}
}
Правильное решение здесь для конкатенации?
Ответы
Ответ 1
Правильное решение здесь для конкатенации?
Да. Расширенный курсивный синтаксис не поддерживает его.
Кроме того, вы можете экспортировать список констант в массив и использовать его (или экспортировать константу в одно имя скалярной переменной), но это не очень хорошее решение IMO.
Обратите внимание, что константы доступны, поскольку вы можете сделать это:
const k = 'foo';
$foo = 'bar';
echo "{${c::k}}"
дает вам bar
, но это не то, что вы хотите.
Ответ 2
Это немного загадочно, но в руководстве есть примечание.
Функции, вызовы методов, статические переменные класса и константы класса внутри {$} работают с 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";
Ответ 3
Кудрявый синтаксис работает только для "переменных выражений". И вам нужно что-нибудь, с чем вы можете получить доступ с помощью {$
.
О, там только обходной путь:
$c = "constant";
return "Twelve in decimal is {$c('c::k')}.";
Это явно не намного короче или читабельнее, чем просто использование конкатенации здесь.