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 ;
}
}
我認爲它應該是'self :: $$ prop_name = $ value;'方法C.另外,啓用對靜態變量的直接外部訪問可以去掉OOP的整個封裝設計。全局可寫的靜態類var與全局變量的好處是什麼? –
它可以被靜態類中的setter/getter包裝。不要使用公共靜態變量。這沒什麼改變。 – sectus
請求,請停止在您的代碼中使用全局狀態。 –