为什么我不能传递变量到PHP中包含的文件?(Why can't I pass variabl

2019-10-18 16:26发布

我以前也有这个问题之前 ,没有真正解决。 它再次发生,所以我希望你专家可以帮助。

我把我的index.php变量基于$ _GET阵列上。 所以我用这个代码:

$admin = isset($_GET['admin']) ? $_GET['admin'] : "dashboard";

下面,我使用的功能,包括我的布局:

include_layout("admin_header.php");

调用该函数:

function include_layout($template="") {
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

到目前为止,一切都很好,一切正常。 但是,如果我尝试从admin_header.php文件中呼应了$ admin变量,我什么也没得到。 这是因为如果它不设置。 我甚至用测试echo $admin; 之前,我包含头文件,它输出存在,​​但它不是从admin_header.php文件的角度设置。

为什么会出现这种情况? 难道是与使用的功能包括,而不是直接包括它? 如果是的话,为什么会是怎么回事?

Answer 1:

这是不可能访问全局变量,除非你说的那么明确。 你必须把global $admin的功能,能够访问的变量。

原因是你包括函数内的文件,因此$ admin变量生活在全球范围内,同时包含的文件住在职能范围。

function include_layout($template="") {
    global $admin;
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

另一种可能性是使用提取方法。

function include_layout($template="", $variables) {
    extract($variables, EXTR_SKIP);
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

include_layout("test.php", array('admin' => $admin));


Answer 2:

它因为该变量超出范围,因为你是包括使用功能的文件。 您可能需要的变量传递给函数在其他参数或变量声明为global函数内

之一:

function include_layout($template="") {
    global $admin;
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

要么:

function include_layout($template="",$admin="") {
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}
include_layout("admin_header.php",$admin);


Answer 3:

这是一个变量范围的问题。 $ admin是不是在函数内部定义,include_layout()。 你可以调整你的代码的几种方法。 一种是说“全球$管理;” 内部include_layout()。 另一种方法是设置变量,$管理员的“admin_header.php”如果里面,例如,变量只需要在一个布局方面。



Answer 4:

这可能很重要,因为PHP不给函数访问全局变量,除非你明确地提出要求。 消毒你的投入也将是一个不错的主意。



文章来源: Why can't I pass variables into an included file in PHP?