当前位置: 首页 > 面试题库 >

在HEREDOC字符串中调用PHP函数

谯德佑
2023-03-14
问题内容

在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都被锁定在一个字符串中,这有几个缺点

  • 所见即所得没有选择
  • IDE中的HTML没有代码完成
  • 输出(HTML)锁定到逻辑文件
  • 您最终不得不像现在尝试那样使用hack来实现更复杂的模板,例如循环

获得基本的模板引擎,或仅将PHP与include一起使用-这就是该语言具有<?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');


 类似资料:
  • 问题内容: 几天前,我在网上搜索时,发现了一篇有关python词典的有趣文章。这是关于使用字典中的键来调用函数。在那篇文章中,作者定义了一些函数,然后定义了一个字典,其键与函数名完全相同。然后,他可以从用户那里获得输入参数并调用相同的方法(类似于实现大小写中断)。此后,我意识到同样的事情,但有所不同。我想知道如何实现这一目标。如果我有一个功能: 现在,如果我有这样的字符串: 有没有一种方法可以执行

  • 主要内容:实例,实例PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。 使用概述: 1. 必须后接分号,否则编译通不过。 2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。 3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和

  • 本文向大家介绍PHP随机字符串函数,包括了PHP随机字符串函数的使用技巧和注意事项,需要的朋友参考一下 我今天正在测试一个字符串操作函数(我将在其他时间发布),我想创建一个可以输入的随机字符串,因此我想出了下面的函数。我以为这是PHPrand()和chr()PHP函数的巧妙用法,所以就在这里。 它通过选择要使用的字符类型(例如大写字母,数字等),然后使用该chr()函数随机选择一个字符来工作。该c

  • 问题内容: 我正在使用Angularjs开发应用程序,并在页面中添加使用。我想在上面动态添加的内容中调用一个函数。我的html和脚本如下。 的HTML Java脚本 jsfiddle 点击这里查看 问题答案: 这有点棘手,因为将只插入普通的旧html而不用麻烦对其进行编译(因此html中的任何指令都不会被angular处理。 诀窍是在模板更改时找到一种编译方法。例如,您可以创建一个执行此操作的指令

  • 问题内容: 有没有一种方法可以使用新的格式语法来格式化函数调用中的字符串?例如: 因此它在字符串 内部* 调用函数函数,而不是在格式化函数中作为参数。 * 编辑:这是另一个示例,可能会更好地显示我的挫败感,这就是我想要的: 这是我要避免的事情: 问题答案: Python 3.6添加了文字字符串插值,并以前缀编写。请参阅PEP 0498-文字字符串插值 。 这允许一个人写 应当注意,这些不是实际的字

  • 问题内容: 我有一个str对象,例如:。我想从此字符串运行安装方法。例如,当我打电话时它将呼叫。有什么办法吗? 问题答案: 如果在课程中,则可以使用getattr: 或者它是一个函数: