gpt4 book ai didi

php - 在模板中延迟加载变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:00 25 4
gpt4 key购买 nike

目前我是这样做的:

function load_template($script, $args){
extract($args);
require __DIR__ . '/templates/' . $script;
}

在我的 Controller 代码中:

// if home page was requested
load_template('home.php', array(
'title' => get_title(),
'content' => get_content(),
...
));

模板只是一个类似PHP的脚本

<!DOCTYPE html>
<html>
<head>
<title> <?php echo $title; ?> </titlee>
...

我想知道是否有可能以某种方式延迟加载这些变量,所以在模板明确请求变量。

如果不创建模板解析器,这是可能的吗?我真的很想坚持使用简单的 .php 脚本和 html 作为模板。


简而言之,我要问的是是否可以仅在第一次请求时自动为变量赋值。

$var = func();  // this should not run

if($var){ // now the code above should run:)
echo $var; // <- the value that was just assigned (don't run func() again)
}

最佳答案

在我看来,如果您不想更改模板来提取变量,您可以创建一个数组,例如知道每个模板需要哪些变量的数组。

您可以考虑一个函数(我们将其命名为 caller ),您将所有参数和模板名称传递到该函数中。 caller可以选择需要哪些变量。这个想法就像 oop 中的工厂类。

我觉得没有别的办法,但是...

插入模板并使用不存在的变量时,将显示警告。您可以让 PHP 在警告中抛出异常,然后在 try ... catch 中抛出异常。 block 解析它。我认为这太复杂了,不值得努力。

编辑

第三个想法是创建对象而不是数组。该对象将保留您所有的 $args多变的。在您的模板中只需更改 <?php echo $title; ?><?php echo $argument_object->getTitle(); ?> , 并编码 getTitle()方法。 getTitle() ,作为方法而不是函数,将仅在请求时运行。

关于php - 在模板中延迟加载变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com