define and heredoc

11

如何在heredoc中使用define?例如:

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

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

11

摘自字符串相关文档

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

$const = PREFIX;

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

谢谢!添加一个小注释:$const/images/hello.png 也可以使用。 - moey
1
在这个例子中,花括号不是必需的。 - wlf
1
你也可以使用 $consts = get_defined_constants(); 来获取所有的定义,然后通过 {$consts['PREFIX']} 访问。 - PhoneixS

7
如果你有超过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


我按照你的建议尝试了一下,因为我觉得很有趣。然而,我突然想到你的建议似乎没有经过测试,因为它会产生很多错误。 - hakre
有没有关于速度方面的想法,与@nbonniot的答案相比:https://dev59.com/6Wkw5IYBdhLWcg3wPIB7。(嗯。疯狂。我从来没有想过……) - Ricalsin

3

在heredoc语法中使用的常量不会被解释!

编辑说明:这是真的。PHP无法识别heredoc块中的常量与其他字符串。

来源


看起来似乎有一个规则例外情况:https://dev59.com/rWsy5IYBdhLWcg3w5CFr#12508992 - hakre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接