【问题标题】:Create a require() alias function创建一个 require() 别名函数
【发布时间】:2016-02-27 20:03:39
【问题描述】:

我有一个具有此功能的课程:

public function loadTemplate($template)
{
    return require "templates/$template.php";
}

没关系,但我有问题。

假设我有这个代码:

require('class.php');    
$class = new ClassName; // ClassName is the class which contains the function loadTemplate()
$name = 'Jerry';
$class->loadTemplate('myname');

“myname.php”是:

<?php
echo "My name is $name.";

在这种情况下,我收到一个错误,因为 "myname.php" 实际上包含在类的文件中,因此 $name 未定义。

我该如何克服这个问题?

【问题讨论】:

  • 老实说,我建议您不要这样设计您的应用程序。或者,您需要以某种方式将“变量”传递给您的 loadTemplate 方法,然后以某种方式将它们传递给 $template。
  • 您认为更好的解决方案是什么?
  • “使用、分析和学习现有的、久经考验的模板系统”是一种选择。
  • 您可能想看看__DIR__ 常量。

标签: php function class


【解决方案1】:

不讨论这是否是最好的设计,这里是你可以做到的。

public function loadTemplate($template, $vars)
{
    extract($vars);
    ob_start();
    require "templates/$template.php";
    $viewContent = ob_get_contents();
    ob_get_clean();
    return $viewContent;
}

将变量作为关联数组传递:

$vars = ['name' => 'Jerry']

然后输出:

echo $class->loadTemplate('myname', $vars);

它的作用是,它从数组中创建变量并加载视图,但使用“ob_”函数,我们捕获输出缓冲区,然后根据需要回显它。

您可能不使用 ob_ 就可以逃脱,只需在您尝试时回显 require 方法。我会说试一试,使用你喜欢的。

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多