2009-12-09 236 views
9

我有以下的(精簡)代碼:訪問全局變量

<?PHP 
    class A { 
     function Show(){ 
      echo "ciao"; 
     } 
    } 

    $a = new A(); 
    $b = new B(); 

    class B { 
     function __construct() { 
      $a->Show(); 
     } 
    } 
?> 

帶着幾分驚喜我無法訪問全局定義的變量$ a從類中,我也得到一個未定義變量異常。任何幫助?

回答

5

爲什麼驚喜?這是一個非常合理的變量範圍問題...

我建議您使用global關鍵字或變量$GLOBALS訪問您的變量。

編輯:所以,你的情況,這將是:

global $a; 
$a->Show(); 

$GLOBALS['a']->Show(); 

編輯2:而且,由於Vinko是正確的,我建議你看一看在PHP的手冊上關於variable scope

+4

令人驚訝的是人們習慣用語言暗示繼承範圍,像C. – 2009-12-09 21:50:37

+0

疑難雜症,Vinko。謝謝。 – Franz 2009-12-09 21:51:14

6

您需要將其定義爲global variable在您想要使用它的函數的範圍內。

function __construct() { 
    global $a; 
    $a->Show(); 
} 
18

請不要使用正在建議的全局方法。這使我的胃受到傷害。

通$一成B.

的構造
class A { 
    function Show(){ 
      echo "ciao"; 
    } 
} 

$a = new A(); 
$b = new B($a); 

class B { 
    function __construct($a) { 
     $a->Show(); 
    } 
} 
+1

這確實是更好的方法。 – Franz 2013-01-13 17:23:28

+0

在這個例子中,爲什麼B不會擴展A? – roberthuttinger 2013-02-05 14:50:12

+0

@roberthuttinger - 這一切都取決於兩個類之間的關係。 – Galen 2013-02-05 20:51:07

0
<?php 
class A { 
    public function Show(){ 
     return "ciao"; 
    } 
} 

class B { 
    function __construct() { 
     $a = new A(); 
     echo $a->Show(); 
    } 
} 

$b = new B(); 
?>