2013-03-31 19 views
0

什麼是一個全球性的值賦給一個靜態屬性(從類外)的最好辦法PHP - 如何全球價值分配到一個靜態類

(我不想使用常量(即定義(...))。

(因爲我使用的是靜態類沒有構造器,所以我不能注入值作爲參數)


APPROACH ...不會工作...我的首選方法,但它不工作

$my_global = "aaa" ; 

class my_class 
    { public static $my_prop = $GLOBALS[ 'my_global' ] ; // XXX   
    } 

APPROACH ...作品,但感覺不對......我可以用一個明確的二傳手,我知道,但後來我會有一堆單一用途的二傳手。

$my_global = "aaa" ; 

my_class::$my_prop = $my_global ; 

class my_class 
    { public static $my_prop ; 

    } 

APPROACH ç ...不會工作......使用通用二傳手分配值,特定的屬性。我想這種方法確定。

$my_global = "aaa" ; 

my_class::my_setter("my_prop" , $my_global) ; 

class my_class 
    { private static $my_prop ; 

    public static function my_setter($prop_name , $value) 
     { self::$prop_name = $value ; // XXX 
     self[ $prop_name ] = $value ; // XXX 
     } 
    } 

APPROACH d ...作品...使用通用二傳手在 '匿名' 的註冊表值分配。我不喜歡這種方法,因爲我不知道註冊表中有什麼。

$my_global = "aaa" ; 

my_class::my_setter("my_prop" , $my_global) ; 

class my_class 
    { private static $my_registry = array() ; 

    public static function my_setter($prop_name , $value) 
     { self::$my_registry[ $prop_name ] = $value ;      
     } 
    } 
+2

我認爲它應該是'self :: $$ prop_name = $ value;'方法C.另外,啓用對靜態變量的直接外部訪問可以去掉OOP的整個封裝設計。全局可寫的靜態類var與全局變量的好處是什麼? –

+0

它可以被靜態類中的setter/getter包裝。不要使用公共靜態變量。這沒什麼改變。 – sectus

+0

請求,請停止在您的代碼中使用全局狀態。 –

回答

1

的直接的解決方案是

class MyClass 
{ 
    public static $property; 
} 

MyClass::$property = 'aaa'; 

CAVEAT:你應該重新考慮你的選擇。靜態類不是一個好主意(如果事實上,它們是單例),因爲它們對可測試性有負面影響。