Отпечатает яблоко:
define("CONSTANT","apple");
echo CONSTANT;
Но это не так:
echo "This is a constant: CONSTANT";
Почему?
Отпечатает яблоко:
define("CONSTANT","apple");
echo CONSTANT;
Но это не так:
echo "This is a constant: CONSTANT";
Почему?
Потому что "константы внутри кавычек не печатаются". Правильная форма:
echo "This is a constant: " . CONSTANT;
Точка - это оператор конкатенации.
define('QUICK', 'slow');
define('FOX', 'fox');
$K = 'strval';
echo "The {$K(QUICK)} brown {$K(FOX)} jumps over the lazy dog {$K(BACK)}.";
Если вы хотите включить ссылки на переменные внутри строк, вам нужно использовать специальный синтаксис. Эта функция называется интерполяцией строк и включена в большинство языков сценариев.
Эта страница описывает функцию в PHP. Похоже, что константы не заменяются во время интерполяции строк в PHP, поэтому единственный способ получить нужное поведение - использовать конкатенацию, предложенную Artefacto.
Фактически, я только что нашел еще одно сообщение, говорящее так:
AFAIK со статическими переменными та же "проблема", что и для констант: невозможна интерполяция, просто используйте временные переменные или конкатенация.
Конкатенация была предложена в качестве единственного решения здесь, но это не работает при использовании синтаксиса типа:
define("MY_CONSTANT", "some information");
$html = <<< EOS
<p>Some html, **put MY_CONSTANT here**</p>
EOS;
Конечно, вышесказанное просто помещает текст "MY_CONSTANT" в $html.
Другие варианты:
определить временную переменную для хранения константы:
$myConst = MY_CONSTANT;
$html = <<< EOS
<p>Some html, {$myConst} </p>
EOS;
если есть много констант, вы можете получить массив из них и использовать это:
$constants = get_defined_constants();
$html = <<< EOS
<p>Some html, {$constants["MY_CONSTANT"]} </p>
EOS;
Конечно, в таком тривиально коротком примере нет причин использовать < < оператор, но с более длинным блоком вывода указанные выше два могут быть намного яснее и проще в обслуживании, чем пучок конкатенации строк!