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)
除非您明确说明,否则无法访问全局变量.你必须放入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)
小智 5
这是一个可变范围的问题。$admin 没有在函数 include_layout() 中定义。您可以通过几种方式调整代码。一种是说“全局$admin;” 在 include_layout() 里面。另一种方法是在“admin_header.php”中设置变量 $admin,例如,如果该变量仅在该布局上下文中需要。
| 归档时间: |
|
| 查看次数: |
3002 次 |
| 最近记录: |