我以前也有这个问题之前 ,没有真正解决。 它再次发生,所以我希望你专家可以帮助。
我把我的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文件的角度设置。
为什么会出现这种情况? 难道是与使用的功能包括,而不是直接包括它? 如果是的话,为什么会是怎么回事?
这是不可能访问全局变量,除非你说的那么明确。 你必须把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));
它因为该变量超出范围,因为你是包括使用功能的文件。 您可能需要的变量传递给函数在其他参数或变量声明为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);
这是一个变量范围的问题。 $ admin是不是在函数内部定义,include_layout()。 你可以调整你的代码的几种方法。 一种是说“全球$管理;” 内部include_layout()。 另一种方法是设置变量,$管理员的“admin_header.php”如果里面,例如,变量只需要在一个布局方面。
这可能很重要,因为PHP不给函数访问全局变量,除非你明确地提出要求。 消毒你的投入也将是一个不错的主意。