簡體   English   中英

將PHP變量傳遞給包含的文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM