如何将全局值赋给静态类


how to assign global value to a static class

给静态属性赋全局值(从类外部)的最佳方法是什么

(我不想使用常量(即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';

警告:您应该重新考虑您的选择。静态类不是一个好主意(事实上,它们是单例的),因为它们对可测试性有负面影响。