给静态属性赋全局值(从类外部)的最佳方法是什么
(我不想使用常量(即define(…)))。
(因为我使用的是静态类,所以没有构造函数,所以我不能将值作为参数注入)
方法A…没用的…我的首选方法,但它不起作用
$my_global = "aaa" ;
class my_class
{ public static $my_prop = $GLOBALS[ 'my_global' ] ; // XXX
}
进场B…工作,但感觉不对…我知道,我可以使用显式setter,但那样我就会有一堆单一用途的setter。
$my_global = "aaa" ;
my_class::$my_prop = $my_global ;
class my_class
{ public static $my_prop ;
}
APPROACH C…没用的…使用泛型setter将值赋给特定属性。我想用这种方法。
$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
}
}
方法D…作品……使用泛型setter在"匿名"注册表中赋值。我不喜欢这种方法,因为我不知道注册表中有什么。
$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 ;
}
}
直接的解决方案是
class MyClass
{
public static $property;
}
MyClass::$property = 'aaa';
警告:您应该重新考虑您的选择。静态类不是一个好主意(事实上,它们是单例的),因为它们对可测试性有负面影响。