[英]Passing PHP variables to an included file?
这应该有用,所以我真的很困惑为什么它不起作用。
我正在检查用户是否使用每个管理页面顶部的$ session类方法登录。 但是,我想根据用户是否登录以及用户具有的角色级别动态调整头文件。
所以我检查$session->is_logged_in()
然后我继续并定义了一个名为$logged = true
的变量; 以后再用 然后我使用$user->find_by_id($session->id)
方法创建一个新的User对象,并将$user->role_level
存储在一个名为$role_level
的新var中,以方便使用。
这一切都发生在页面顶部附近。 在页面的下方经过表格处理等,是include("../_layouts/header.php")
命令。 然后,在header.php文件中,我使用if(!$logged) { ... } else { ... }
类的小支票。 然而...
我收到以下错误:
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138
怎么会这样? 在我包含header.php之前,我正在定义文件中的变量! 不应该那样吗?
仅供参考,一切正常,直到我尝试使用$logged
header.php文件。
变量确实传播到包含的文件,所以它必须是,当你调用include时不设置变量:尝试检查是否如此,然后弄清楚为什么变量没有设置在那一点。
例如,如果在“if”块或函数内定义$ logged,则它不会在其外部传播:您必须在最外层范围内定义它(在您调用include语句的同一级别) 。 并且您必须为用户未登录的情况定义它,而不仅仅是在用户登录的情况下。如果变量未初始化为false,则检查是否(!$ logged)将发出警告。 假设$ logged = false; 在你工作的开始。
尝试非常简单的事情,比如
// file1.php
$var = "foobar";
// file2.php
include("file1.php"); // or require("file1.php");
die($var);
它有用吗? 也许这是代码之外的问题。
只是一个意见......而不是包括在全局空间中执行的代码并依赖于定义的另一个全局变量,包括你的文件在哪里,并将header.php中的代码组织成适当的函数。 然后你想要header.php的输出,用$ logged作为参数调用相应的函数。 这将有助于使您的代码更具凝聚力,更容易测试(如在单元测试中)。
而不是if (!logged)
,尝试if (empty($logged))
。 在未设置变量的情况下,这不会生成通知。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.