2015-06-01 17 views
3

您好我正在寫一些代碼在PHP中。我需要在全班範圍內使用全局範圍的變量,但它不起作用。我不知道我是否需要使用命名空間,以及如何使用命名空間?謝謝 樣品:PHP使用變量從全球空間裏面類

<?PHP 

$plantask_global_script = array("one", "two"); 
$plantask_global_config = array("three", "four"); 
$myvar = array_merge($plantask_global_script, $plantask_global_config); 

class Env implements ArrayAccess 
{ 
    static private $container = $myvar; 

    public function offsetSet($offset, $value) 
    { 
     if (is_null($offset)) { 
      self::$container[] = $value; 
     } else { 
      self::$container[$offset] = $value; 
     } 
    } 

    public function offsetExists($offset) 
    { 
     return isset(self::$container[$offset]); 
    } 

    public function offsetUnset($offset) 
    { 
     unset(self::$container[$offset]); 
    } 

    public function offsetGet($offset) 
    { 
     return isset(self::$container[$offset]) ? self::$container[$offset] : null; 
    } 
} 
+1

嘗試在您的類的第一行添加代碼:global $ myvar; –

+2

順便說一下,全局變量通常不是很好的OOP練習,它們會創建類與全局變量的緊密耦合 –

+0

爲了避免$ GLOBALS,您可以創建一個getter和一個setter方法來在類中使用該值。 –

回答

3

嘗試調用$myvar作爲一個全局變量:1

private static $container = $GLOBALS['myvar']; 

雖然羅恩Dadon指出,這通常是OOP不好的做法。

編輯:

我這裏搶跑。我的上述解決方案實際上並不工作,至少不適合我。因此,更好的實現方法如下:

$myvar = array_merge($plantask_global_script, $plantask_global_config); 

class Env implements ArrayAccess 
{ 
    private static $container = null; 

    public static function init($var) 
    { 
     self::$container = $var; 
    } 

    ... 
} 

Env::init($myvar); 
+0

非常感謝,我現在可以關閉。 :) –

+0

請參閱我的編輯。我相信我原來的建議實際上並不奏效。我想確保你的問題得到了正確的回答:) –