为什么我不能将变量传递到PHP中的包含文件?

rho*_*son 1 php variables include

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

我根据$ _GET数组在index.php上设置了一个变量.所以我使用这段代码:

$admin = isset($_GET['admin']) ? $_GET['admin'] : "dashboard";
Run Code Online (Sandbox Code Playgroud)

在下面,我使用一个函数来包含我的布局:

include_layout("admin_header.php");
Run Code Online (Sandbox Code Playgroud)

调用此函数:

function include_layout($template="") {
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这么好,一切正常.但是,如果我尝试从admin_header.php文件中回显$ admin变量,我什么也得不到.就好像它没有设置一样.我甚至echo $admin;在我包含头文件之前使用它来测试它,并且它在那里输出,但它不是从admin_header.php文件的角度设置的.

为什么会这样?是否与使用函数包含而不是直接包含它有关?如果是这样,那为什么会这么重要?

rob*_*lls 12

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

之一:

function include_layout($template="") {
    global $admin;
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}
Run Code Online (Sandbox Code Playgroud)

要么:

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


Ikk*_*kke 9

除非您明确说明,否则无法访问全局变量.你必须放入global $admin函数才能访问变量.

原因是您将函数包含在函数内部,因此$ admin变量位于全局范围内,而包含的文件位于函数范围内.

function include_layout($template="") {
    global $admin;
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}
Run Code Online (Sandbox Code Playgroud)

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

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

include_layout("test.php", array('admin' => $admin));
Run Code Online (Sandbox Code Playgroud)

  • 您可以解释为什么它不能按预期工作 - 即文件包含在函数的上下文中. (2认同)

小智 5

这是一个可变范围的问题。$admin 没有在函数 include_layout() 中定义。您可以通过几种方式调整代码。一种是说“全局$admin;” 在 include_layout() 里面。另一种方法是在“admin_header.php”中设置变量 $admin,例如,如果该变量仅在该布局上下文中需要。