$GLOBALS['current_view']
和global $current_view
,您更喜歡哪種?爲什麼?訪問PHP全局變量的方法
0
A
回答
10
既不將參數傳遞給方法。每當你使用全局變量時,神會殺死一隻小貓。
3
如果我必須使用全局變量,並且我避免他們像瘟疫一樣,我使用全局$ current_view。我只是喜歡總是有一個局部範圍的變量,而不是依賴於超級全局變量。但我認爲它是一個偏好問題。
3
個人而言,我更喜歡$GLOBALS['glob']
語法,因爲我可以複製粘貼代碼而不必擔心將變量聲明爲全局變量。請記住,你應該儘量保持全局最小化(也許只是全局配置指令,甚至是......)。
但是,這兩種方法並不完全是同義的;有一點點區別:
function func() {
var_dump($GLOBALS['glob']);
}
function func2() {
global $glob;
var_dump($glob);
}
如果全局'glob'不存在,第一個會發出通知。第二個不會。
在第一種情況下,發送$GLOBALS['glob']
作爲參數編譯爲:
3 FETCH_R global $0 'GLOBALS'
4 FETCH_DIM_R $1 $0, 'glob'
你取GLOBALS
及其在讀上下文索引glob
;沒有變量被創建。
第二個編譯成
compiled vars: !0 = $glob
...
2 FETCH_W global lock $0 'glob'
3 ASSIGN_REF !0, $0
你正在創建全球glob
的引用,因此如果它不存在,它是隱式創建。
另外:
function func_unset() {
unset($GLOBALS['glob']);
}
function func2_unset() {
global $glob;
unset($glob);
}
功能func()
實際上會清除全球,func2_unset
只會破壞所創建的參考。
注意func2
非常相似:
function func3() {
$glob =& $GLOBALS['glob'];
}
這是一個潛在但是效率較低。它編譯成
2 FETCH_W global $0 'GLOBALS'
3 FETCH_DIM_W $1 $0, 'glob'
4 ASSIGN_REF !0, $1
0
靜態類FTW
class View {
private static $current = null;
public static function get_current() {
return self::$current;
}
}
相關問題
- 1. 訪問方法中的全局變量
- 2. 從方法Typescript訪問全局變量
- 3. PHP訪問全局變量的問題
- 4. 無法訪問全局變量的值
- 5. 訪問javascript全局變量
- 6. 訪問全局變量
- 7. 全局訪問變量
- 8. JSP訪問全局變量
- 9. AS3:訪問全局變量
- 10. 訪問全局變量
- 11. 訪問全局變量
- 12. 訪問全局變量inPerformed
- 13. 訪問全局變量
- 14. 全局類訪問變量
- 15. Javascript全局變量訪問
- 16. 無法訪問全局變量在python
- 17. 無法訪問一個全局變量
- 18. 無法訪問全局變量功能
- 19. 無法訪問全局變量
- 20. 無法訪問javascript全局變量
- 21. 無法訪問一個全局變量
- 22. 訪問全局變量的問題
- 23. python訪問方法中的全局變量。
- 24. 訪問Codeigniter中混淆方法的全局變量?
- 25. 在方法中訪問局部變量?
- 26. 全局變量Web方法
- 27. 無法訪問全局PHP數組變量
- 28. php - 無法從Thread中訪問全局變量?
- 29. 無法在PHP codeigniter Model類中訪問全局變量。
- 30. 在靜態方法中訪問全局類的全局方法
我想你應該問*是什麼,而不是什麼人蔘考的最佳實踐*(即使它們可能是同樣的事情)。 – alex 2010-05-25 02:00:14
@alex實際上有輕微的差異。 – Artefacto 2010-05-25 02:20:50
@Artefacto是的,但我寧願編碼以便最佳實踐,然後互聯網上的某個人*更喜歡*。 – alex 2010-05-25 02:27:18