【发布时间】:2019-04-07 03:25:03
【问题描述】:
在 PHP 中,HEREDOC 字符串声明对于输出 html 块非常有用。您可以通过在变量前面加上 $ 来解析变量,但对于更复杂的语法(如 $var[2][3]),您必须将表达式放在 {} 大括号内。
在 PHP 5 中,实际上可以在 HEREDOC 字符串内的 {} 大括号内进行函数调用,但您必须做一些工作。函数名本身必须存储在一个变量中,并且您必须像调用它是动态命名的函数一样调用它。例如:
$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;
如您所见,这比刚才更混乱:
$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;
除了第一个代码示例之外,还有其他方法,例如跳出HEREDOC来调用函数,或者扭转问题并执行以下操作:
?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>
后者的缺点是输出直接放入输出流中(除非我使用的是输出缓冲),这可能不是我想要的。
所以,我的问题的本质是:有没有更优雅的方法来解决这个问题?
根据回复进行编辑: 确实看起来某种模板引擎会让我的生活更轻松,但它需要我基本上颠倒我通常的 PHP 风格。并不是说那是一件坏事,但它解释了我的惰性。不过,我正在想办法让生活更轻松,所以我现在正在研究模板。
【问题讨论】:
-
严格来说,这不是您问题的答案,但鉴于在 heredoc 语句中对函数调用的支持不佳,我通常只在打印 heredoc 之前生成我需要的字符串。然后,我可以在 heredoc 中简单地使用
Text {$string1} Text {$string2} Text之类的东西。