2012-09-06 26 views
0

我想要一個變量是超全局,但隨着使用過程的風格是,我不認爲我可以讓我自己的,所以基本上的問題是,我使用的查詢檢索從安全表我的網站的所有安全控制,我檢查維護模式是開/關,如果它是在凌晨下的維護頁面它重定向到網站,讓每一頁上我需要檢查變量$maintenance_status的狀態,這樣做的,我需要在調用查詢每個頁面,否則會得到一個錯誤,未定義的變量,此外,如果我正在製作一個函數並在其他頁面中包含該函數文件,它向我顯示$db_connect(這是我的db連接變量)未定義,包括我的頁面此序列自定義變量可以像每個頁面一樣使用超級全局變量嗎?

include_once('connection.php'); 
include_once('functions.php'); 
/*other scripts goes here*/ 

任何想法如何在每個頁面上拉這個狀態?我想爲常見查詢創建一個新文件,但它是一個乾淨的解決方案嗎?而且我猜我不理解包括,如果我包括connection.phpfunctions.php比以前爲什麼我functions.php是顯示未定義的變量$db_connect

回答

0

不會對您的文件中,你所得到的是錯誤的更多代碼情況下,這將是很難提供任何建議。例如,你是否在函數內部引用了$ db_connect?如果是這樣,除非在該函數中使用global $db_connect聲明(要在全局範圍中使用$ db_connect,而不是在函數範圍中未定義的$ db_connect),否則它將不起作用。

儘管我不喜歡在函數內部使用這樣的global聲明(我寧願使用依賴注入,或者通過靜態單例函數調用來獲取數據庫連接),但這可能是另一次的教訓。

你可能是最好反正有助於使某種init腳本查詢(如後您的connection.php inlcude),並定義常量關於是否維護模式是否打開或關閉。這樣

// assuming you have already made DB query and have a value of true/false on a variable called $is_maint_mode 
define('MAINT_MODE', $is_maint_mode); 

這東西會給你一個常數MAINT_MODE這是全球範圍內提供給您的代碼。

+0

賓果,我定義$ db_connection全球和它的工作原理,並順便說一句,你建議我不應該使用全局,但在這裏,我的連接變量是全球性的,我想這是非常好的?無論如何,我會改變我的db_connection到一個常量 –

+0

實際上,因爲我說我不能使用常量,因爲如果我使用常量比我可以在連接或我的功能頁上調用一個查詢,因爲這些是我只有兩個頁面包括反正我做了一個函數,在那個函數中調用了一個查詢,使得我的數據庫連接變量爲全局變量,並且返回值並使用'if(maintenance_status()== off){}然後做一些事情}'與一個字符串進行比較。任何方式,這兩個答案都很有幫助,但使用全球字解決我的功能錯誤。 –

+0

@ V413HAV DB連接句柄不能存儲在一個常量中。但是,您可以將常量中的值保存在您的維護模式開/關值中。我只是說我通常不喜歡在函數中使用'global $ variable'類型的聲明。我通常會使用依賴注入(傳遞變量作爲參數),或者使用數據庫連接singleton,並且只需從函數內部調用一個靜態方法,如'db :: connect()'來獲取函數中的數據庫連接句柄。但是既然你說過你主要是在做程序,那麼最後的解決方案可能不適合你。 –

1

您可以通過使用定義爲一個常數()。定義可以爲每個腳本執行設置一次,並且在一次腳本執行期間不能更改。它們是超全球的 - 也包括正在包含的文件。

http://php.net/define或只是

define('MY_CONSTANT', 'whatever'); 
define('MY_OTHER_CONSTANT', false); 

function foo() { 
    if (MY_OTHER_CONSTANT !== true) { 
     echo MY_CONSTANT; 
    } 
} 

foo(); 
+0

以及我會定義常量,但如果我在函數頁面上定義它,我得到我的文件沒有與我的數據庫連接,我已經指定了包含,如果我在頁面中定義它,我不能將它包括其他,我可以在這裏做的唯一的事情就是將其定義爲我的連接文件 –

+0

感謝您的回答,但我需要將mm_db_connect作爲全局變量,現在我只是在每個頁面上調用函數,我只能標記1回答爲小鬼,但我會upvote你的:) –

+0

其實你需要一個靜態單身類爲你的分貝。 :) –

相關問題