这应该有用,所以我真的很困惑为什么它不起作用。
我正在检查用户是否使用每个管理页面顶部的$ 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之前,我正在定义文件中的变量!不应该那样吗?
仅供参考,在我尝试在header.php文件中使用$logged
之前,一切正常。
答案 0 :(得分:4)
变量确实传播到包含的文件,所以必须是,当你调用include时不设置变量:尝试检查是否如此,然后弄清楚为什么变量没有设置在那一点。
例如,如果您在“if”块内或函数内部定义了$ logged,那么它将不会在其外部传播:您必须在最外层范围内定义它(在您调用它的同一级别)包括声明)。并且您必须为用户未登录的情况定义它,而不仅仅是在用户登录的情况下。如果变量未初始化为false,则检查是否(!$ logged)将发出警告。假设$ logged = false;在你工作的开始。
答案 1 :(得分:1)
尝试一些非常简单的事情,比如
// file1.php
$var = "foobar";
// file2.php
include("file1.php"); // or require("file1.php");
die($var);
有用吗?也许这不是你代码之外的问题。
答案 2 :(得分:1)
只是一个观点...而不是包括在全局空间中执行的代码,并且取决于定义的另一个全局变量,在任何地方都包含你的文件,并将header.php中的代码组织成适当的函数。然后你想要header.php的输出,用$ logged作为参数调用相应的函数。这将有助于使您的代码更具凝聚力,更容易测试(如在单元测试中)。
答案 3 :(得分:1)
而不是if (!logged)
,请尝试if (empty($logged))
。在没有设置变量的情况下,这不会产生通知。