2011-11-23 13 views
7

Come si utilizza define all'interno di heredoc? Per esempio:define e heredoc

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

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

risposta

9

tratto da the documentation regarding strings

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

$const = PREFIX; 

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

Grazie! Aggiungendo una piccola nota: '$ const/images/hello.png' funzionerà anche. – moey

+0

parentesi graffe non sono richieste in questo esempio. – wlf

+0

Puoi anche usare '$ consts = get_defined_constants();' per ottenere tutti i define e quindi accedere con '{$ consts ['PREFIX']}'. – PhoneixS

2

Costanti utilizzate all'interno della sintassi heredoc non vengono interpretati!

Nota del redattore: questo è vero. PHP non ha modo di riconoscere la costante da qualsiasi altra stringa di caratteri all'interno del blocco heredoc.

Source

+0

Sembra che ci sia un'eccezione a questa regola: http://stackoverflow.com/a/12508992/367456 – hakre

5

se si dispone di più di 1 costante, l'utilizzo della variabile sarebbe difficile. in modo da provare questo metodo

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

Ho seguito il tuo suggerimento per provarlo perché ho pensato che fosse interessante, tuttavia mi è venuto in mente che il tuo suggerimento sembra non testato, perché dà molti errori. – hakre

+0

Ho cambiato la risposta. –

+0

Funziona bene per me! –