2011-11-23 18 views
7

heredoc içinde define'u nasıl kullanırsınız? Örneğin:define ve heredoc

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

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

cevap

9

the documentation regarding strings

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

$const = PREFIX; 

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

Teşekkür deneyin! Küçük bir not eklemek: '$ const/images/hello.png' da çalışır. Bu örnekte – moey

+0

küme parantezleri gerekli değildir. – wlf

+0

Ayrıca '$ consts = get_defined_constants();' tüm tanımlarını almak ve daha sonra '{$ consts ['PREFIX']}' ile erişmek için kullanabilirsiniz. – PhoneixS

2
gelen heredoc sözdizimi içinde kullanılan

sabitleri alınan yorumlanır değil!

Editörün Notu: Bu doğrudur. PHP, sabitini, heredoc bloğu içindeki herhangi bir karakter dizisinden ayırt etmenin hiçbir yolunu kullanamaz. Eğer 1'den fazla sabit varsa

Source

+0

Bu kuralın bir istisnası var gibi görünüyor: http://stackoverflow.com/a/12508992/367456 – hakre

5

, değişken kullanım zor olacaktır. böylece bu yöntemi

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

Bunu önermek için önerinizi izledim çünkü ilginç olduğunu düşündüm, ancak aklıma öneriniz geldi test edilmedi, çünkü birçok hata veriyor. – hakre

+0

Cevabı değiştirdim. –

+0

Bu benim için iyi çalışıyor! –

İlgili konular