2011-03-31 35 views
1

可能重複:
Global variables in PHPPHP全局變量的函數沒有找到

我有一個像

global $var1; 

function func1() { 
    $var1->something(); // $var1 not found ... why? 
} 

PHP腳本成才必須做全球$ VAR1每功能?

+2

嚴重的是,你們是否曾經在**之前搜索**,詢問您的問題,就像您要求在http://stackoverflow.com/questions/ask-advice中所做的那樣。同樣的事情只是在9小時前被問到,而且這也是很多重複的事情。請在提問前做好功課。 – Gordon 2011-03-31 07:06:57

回答

4

我必須做全球$ VAR1在每一個功能呢?

是的。在PHP

功能得到自己的變量範圍。獲取全局範圍內變量的唯一方法是直接請求變量。

我相信你會明白這是如何造成難以閱讀的麪條代碼。儘可能避免使用全局變量。代替

如果您正在構建面向對象代碼,請考慮使用a Registry(命名空間集合)和/或Dependency Injection(在構造函數中傳遞新對象所需的對象)。

+4

我寧願放棄註冊表中的全球命名空間,因爲這是它是什麼,如果你靜態訪問它。與使用'$ GLOBALS'或使用'global'關鍵字導入數組相同的問題。見http://stackoverflow.com/questions/5283102/how-is-testing-registry-pattern-or-singleton-hard-in-php/5283151#5283151 – Gordon 2011-03-31 07:10:14

1

它是周圍的其他方式。

$var1 = new StdClass(); 

function func1() { 
    global $var1 
    $var1->something(); // $var1 not found ... why? 
} 
` 

確實的,您需要在您聲明的每個函數中以這種方式調用它。