2010-06-21 65 views
0

我有一個php文件,其中包含另一個使用include() 我在包含的文件中定義了一個變量$something,並且這將根據在包含文件中運行的函數進行更改。從包含的文件中檢索變量

現在,我想在原始文件中打印那個變量,當我使用echo $something它絕對沒有打印什麼,幫忙嗎?

回答

9

我們只是暫時擱置,這是片刻:)

你可能運行到一個問題,即你沒有聲明的變量一個貧窮的設計選擇作爲修改它的函數的全局。

function foo() 
{ 
    global $something; 
    $something='bar'; 
} 

你會在這方面找到最有教育意義的PHP手冊頁!

那麼,爲什麼這是一個糟糕的設計選擇?首先,請查看"Are global variables bad?",它回答了C++的問題。 PHP的答案實際上沒有什麼不同 - 它可能會導致無法維護且無法讀取的代碼。

PHP還有另外一個(越來越歷史的)皺紋 - 如果'register_globals'設置打開,用戶可以通過URL查詢字符串設置全局變量。這可能會導致各種安全問題,這就是爲什麼現在默認情況下會關閉此功能(絕不會寫入需要啓用的新代碼)。

作爲一個智者曾經說過,「全局的路徑黑暗的一面。全局導致的憤怒。憤怒導致恨。恨導致患」 :)

+0

+1,正是我在想什麼。 – 2010-06-21 20:11:01

+0

希望OP會跟進一個新問題,「爲什麼這是一個糟糕的設計選擇」。 – Zak 2010-06-21 20:12:58

+0

爲什麼這是一個糟糕的設計選擇? (不是在一個新的問題,但我想獲得的信息,如果你不介意:)) – user220755 2010-06-21 20:20:14

1

很可能您已聲明你的變量在全局範圍內,並試圖在功能範圍內使用它。要解決這個問題,請使用global命令。

$myglobal = 3; 

function printMyGlobal() { 
    global $myglobal; // will not work without this line 
    echo $myglobal; 
}