2011-02-15 98 views
2

我不確定在PHP中這是否可能,但這是我試圖做的。我在課堂上有一個靜態變量,我想在課堂外作爲參考。PHP引用一個靜態變量

class Foo { 

    protected static $bar=123; 

    function GetReference() { 

    return self::&$bar; // I want to return a reference to the static member variable. 
    } 

    function Magic() { 

    self::$bar = "Magic"; 
    } 
} 

$Inst = new Foo; 
$Ref = $Inst->GetReference(); 
print $Ref; // Prints 123 
$Inst->DoMagic(); 
print $Ref; // Prints 'Magic' 

有人可以證實這是否可能在全部或另一種解決方案,以達到相同的結果:

  • 的變量必須是靜態的,因爲類Foo是一個基類和所有衍生物需要訪問相同的數據。
  • HTML需要訪問類引用數據,但不能在沒有setter方法的情況下設置它,因爲類需要知道變量何時設置。

我想它總是可以用全局聲明的類和一些編碼規則作爲緊急解決方案來解決。

//感謝

[編輯]
是,我使用PHP 5.3.2

+0

什麼是你的目標PHP版本? – DrDol 2011-02-15 13:33:29

+1

爲什麼要參考?在大多數情況下,它可以在沒有引用的情況下處理(例如,使用明確的getter/setter)。引用使代碼難以調試(因爲在一段代碼中的副作用會影響其他代碼段)。嘗試遠離他們,除非**絕對**必要(這在我的經驗很少)... – ircmaxell 2011-02-15 13:44:54

回答

3

PHP文檔提供了一個解決方案:Returning References

<?php 
class foo { 
    protected $value = 42; 

    public function &getValue() { 
     return $this->value; 
    } 
} 

$obj = new foo; 
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42. 
$obj->value = 2; 
echo $myValue;