определить и задокументировать

Как вы используете define в heredoc? Например:

define('PREFIX', '/holiday');

$body = <<<EOD
<img src="PREFIX/images/hello.png" />   // This doesn't work.
EOD;

person moey    schedule 23.11.2011    source источник


Ответы (3)


взято из документации по строкам

DEFINE('PREFIX','/holiday');

$const = PREFIX;

echo <<<EOD
<img src="{$const}/images/hello.png" /> 
EOD;
person Jan Dragsbaek    schedule 23.11.2011
comment
Спасибо! Добавление небольшого примечания: $const/images/hello.png также будет работать. - person moey; 23.11.2011
comment
фигурные скобки в этом примере не требуются. - person wlf; 07.12.2012
comment
Также вы можете использовать $consts = get_defined_constants();, чтобы получить все определения, а затем получить доступ с помощью {$consts['PREFIX']}. - person PhoneixS; 11.12.2017

если у вас есть более 1 константы, использование переменных будет затруднено. так что попробуй этот метод

define('PREFIX', '/holiday');
define('SUFFIX', '/work');
define('BLABLA', '/lorem');
define('ETC', '/ipsum');

$cname = 'constant'; // if you want to use a function in heredoc, you must save function name in variable

$body = <<<EOD
<img src="{$cname('PREFIX')}/images/hello.png" />
<img src="{$cname('SUFFIX')}/images/hello.png" />
<img src="{$cname('BLABLA')}/images/hello.png" />
<img src="{$cname('ETC')}/images/hello.png" />
EOD;

http://codepad.org/lA8L2wQR

person MC_delta_T    schedule 20.09.2012
comment
Я последовал вашему предложению, чтобы попробовать это, потому что я подумал, что это интересно, однако мне пришло в голову, что ваше предложение выглядит непроверенным, потому что оно дает много ошибок. - person hakre; 24.09.2012
comment
(Хм. Сумасшедший. Я бы никогда...) Любые мысли о скорости по сравнению с ответом @nbonniot: stackoverflow.com/questions/10041200/ - person Ricalsin; 06.05.2016

Константы, используемые в синтаксисе heredoc, не интерпретируются!

Примечание редактора: это правда. PHP не может распознать константу из какой-либо другой строки символов в блоке heredoc.

Источник

person codaddict    schedule 23.11.2011
comment
Похоже, что из этого правила есть исключение: stackoverflow.com/a/12508992/367456 - person hakre; 24.09.2012