在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。它只是不能构成一个好的“模板构建”系统。您所有的HTML都被锁定在一个字符串中,这有几个缺点
获得基本的模板引擎,或仅将PHP与include一起使用-这就是该语言具有<?php和?>分隔符的原因。
<?php
?>
template_file.php
<html> <head> <title><?php echo $page_title; ?></title> </head> <body> <?php echo getPageContent(); ?> </body>
index.php
<?php $page_title = "This is a simple demo"; function getPageContent() { return '<p>Hello World!</p>'; } include('template_file.php');