Почему значение константы класса оценивается в одном выражении, а не в другом?

я использую 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’.

Но я не могу этого сделать. Пожалуйста, помогите мне в этом отношении.

Постскриптум : Пожалуйста, не просите меня добиться вывода с использованием конкатенации строк. Я хочу добиться вывода только с помощью константы класса в строка двойных кавычек.

0

Решение

Афаик это не возможный. Весь «синтаксический анализ переменных» (расширенный фигурный синтаксис) в строках выполняется на основе переменных. Переменные всегда начинаются со знака $, поэтому не начинается с $, кажется, не работает. (То есть все, что не является (частью) переменной, не может быть использовано.).

Упрощенный пример (который не будет работать):

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";

Это далеко от того, что я бы порекомендовал сделать !!!

1

Другие решения

Сделай это так —

echo "I'd like an ". beers::softdrink ."\n";
0

Вы можете сделать это с помощью printf —

printf("I'd like an %s\n", beers::softdrink);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector