2011-06-05 114 views

回答

7

是的。可以從任何位置訪問它們,包括其他腳本。他們是略微更好,因爲你必須使用global關鍵字從一個函數內訪問它們,這使得它們更加清晰地表明它們來自哪裏以及它們的作用。

The disadvantages of global variables apply,但這並不能立即使它們成爲邪惡的,正如在某些面嚮對象語言中經常被察覺的那樣。如果他們提供了一個高效且易於理解的好解決方案,那麼你很好。實際上有數百萬成功的PHP項目使用這樣的全局變量聲明。你可以做的最大的錯誤就是沒有使用它們,並且如果首先使用它們的話可能會讓你的代碼變得更加複雜。 :D

4
<?php 

$foo = 1; 

function meh(){ 
    global $foo; 
    // <-- $foo now can be accessed 
} 

?> 
2

功能的外面是八九不離十像全球範圍內(相比於C的語言),但你必須做的一件事,讓一個函數內訪問VAR:

function meh(){ 
    global $foo; 
    // $foo now exists in this scope 
} 
2

在您的示例中$foo在全局範圍內被創建爲變量。 (除非在另一個函數/方法範圍內顯示的腳本是included())。

PHP沒有真正的全局變量。您必須使用global $foo;語句手動將其別名,才能訪問它們。 (也是「什麼東西全球都不好」建議就是這樣,壞建議。)

2

如果我正確理解你的問題,真的不應該有問題。除非將變量聲明爲全局變量,否則它將被限制在聲明的範圍內,在這種情況下,無論上面的代碼是在哪個php文件中定義的。您都可以在meh()中聲明另一個變量$ foo,它會是獨立於外部定義的$ foo。

7

在全局範圍內聲明在任何函數外部定義的所有變量。如果你想訪問一個全局變量,你有兩個選擇:

  1. 使用全球關鍵字

    <?php 
    $a = 1; 
    $b = 2; 
    
    function Sum() 
    { 
        global $a, $b; 
    
        $b = $a + $b; 
    } 
    ?> 
    
  2. 或者使用$ GLOBALS

    <?php 
    $a = 1; 
    $b = 2; 
    
    function Sum() 
    { 
        $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; 
    } 
    ?> 
    

    閱讀更多at http://php.net/manual/en/language.variables.scope.php