在函数内调用"require"



在我正在处理的页面中,我要做的第一件事就是包含我的tools.php文件。说,index.php

require("../scripts/tools.php");

接下来,我创建一个自定义 css

$custom_css = [
    $link([
        "rel"   => "stylesheet",
        "type"  => "text/css",
        "media" => "screen",
        "href"  => BASE . "css/layout-list.css",
        ]),
];

并使用在tools.php内声明的自定义 require 函数包含 head 元素。

req("template/head.php");

我使用自定义require的原因是,每次深入文件夹结构时,我都需要增加每个路径上的../。我不想手动添加它们。

tools.php中有一个base()函数,它会自动计算返回主文件夹所需的../,并将其分配给BASE常量。此BASE常量用于req()函数

function req($path) {
    require(BASE . $path);
}

这(有点)有效。问题是,由于(实际)require是在函数内部调用的,head.php无法访问$custom_cssindex.php无法访问head.php中的任何变量。


我想出的解决方案是在使用它之前声明变量是全局的。

因此,如果我必须从head.php访问index.php $custom_csshead.php我这样做:

global $custom_css;
if (!isset($custom_css)) {
    $custom_css = [];
}

如果我必须访问一个从index.php head.php的变量,我必须在head.php内全局声明该变量:

global $head_var;
$head_var = 4;

这个过程似乎非常累人和多余。难道没有办法改变require效果吗?即使文件包含在函数中,也使包含文件中的所有变量全局化?

如果你的自定义req所做的只是在前面加上一个在 tools.php 中定义的常量,为什么不直接使用该常量呢?

require(BASE."template/head.php");

相关内容

  • 没有找到相关文章

最新更新