я использую PHP 7.2.6
Я пробовал следующую программу:
<?php
class beers {
const softdrink = 'rootbeer';
}
$rootbeer = 'A & W';
echo "I'd like an {${beers::softdrink}}\n"; //Output : I'd like an A & W
echo "I'd like an {beers::softdrink}\n"; //Output : I'd like an {beers::softdrink}
?>
В приведенном выше утверждении, в первом утверждении echo значение константы класса softdrink
оценивается как строка ‘Rootbeer’ который в свою очередь имя переменной, которая содержит строку «A & W». Значение «A & W» печатается.
Во втором утверждении эха я только хочу показать значение, присутствующее в константе класса softdrink
какая строка ‘Rootbeer’.
Но я не могу этого сделать. Пожалуйста, помогите мне в этом отношении.
Постскриптум : Пожалуйста, не просите меня добиться вывода с использованием конкатенации строк. Я хочу добиться вывода только с помощью константы класса в строка двойных кавычек.
Афаик это не возможный. Весь «синтаксический анализ переменных» (расширенный фигурный синтаксис) в строках выполняется на основе переменных. Переменные всегда начинаются со знака $, поэтому не начинается с $, кажется, не работает. (То есть все, что не является (частью) переменной, не может быть использовано.).
Упрощенный пример (который не будет работать):
const TEST = 'A & W';
echo "I'd like an {TEST}\n";
То же самое для вызовов функций (которые также не работают напрямую)
$test = ' A & W ';
echo "I'd like an {trim($test)}\n";
Только в «под» фигурных скобках может быть использован желаемый результат, но он должен быть снова проанализирован как переменная, что делает это невозможным (на данный момент).
Работает:
$AW = 'A & W';
$test = ' AW ';
echo "I'd like an {${trim($test)}}\n";
Редактировать:
Если вы действительно хотите вывести (класс) константу внутри сложного выражения фигурной скобки:
class beers {
const softdrink = 'rootbeer';
}
function foobar($test) {
$GLOBALS[$test] = $test;
return $test;
}
echo "I'd like an {${foobar(beers::softdrink)}}\n";
Это далеко от того, что я бы порекомендовал сделать !!!
Сделай это так —
echo "I'd like an ". beers::softdrink ."\n";
Вы можете сделать это с помощью printf —
printf("I'd like an %s\n", beers::softdrink);