2011-11-23 13 views
7

¿Cómo se usa define dentro de un heredoc? Por ejemplo:define y heredoc

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

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

Respuesta

9

tomado de the documentation regarding strings

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

$const = PREFIX; 

echo <<<EOD 
<img src="{$const}/images/hello.png" /> 
EOD; 
+0

Gracias! Agregar una pequeña nota: '$ const/images/hello.png' también funcionará. – moey

+0

no se requieren corchetes en este ejemplo. – wlf

+0

También puede usar '$ consts = get_defined_constants();' para obtener todas las definiciones y luego acceder con '{$ consts ['PREFIX']}'. – PhoneixS

2

constantes utilizadas dentro de la sintaxis heredoc no se interpretan!

Nota del editor: Esto es cierto. PHP no tiene forma de reconocer la constante desde cualquier otra cadena de caracteres dentro del bloque heredoc.

Source

+0

Parece que hay una excepción a esa regla: http://stackoverflow.com/a/12508992/367456 – hakre

5

si tiene más de 1 constante, el uso variable sería difícil. a fin de tratar este método

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

+0

Seguí tu sugerencia para probar eso porque pensé que era interesante, sin embargo, me vino a la mente que tu sugerencia parece no probado, porque da muchos errores. – hakre

+0

he cambiado la respuesta. –

+0

¡Esto funciona bien para mí! –