将PHP变量传递给包含的文件?

时间:2009-10-21 14:48:46

标签: php variables include

这应该有用,所以我真的很困惑为什么它不起作用。

我正在检查用户是否使用每个管理页面顶部的$ 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之前,一切正常。

4 个答案:

答案 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))。在没有设置变量的情况下,这不会产生通知。