0

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

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

(因为我使用的是静态类,所以没有构造函数,所以我不能将值作为参数注入)


方法A ...不会工作 ...我的首选方法,但它不起作用

$my_global = "aaa" ;

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

方法B ...可行,但感觉不对...我可以使用显式设置器,我知道,但那样我就会有一堆单一用途的设置器。

$my_global = "aaa" ;

my_class::$my_prop = $my_global ; 

class my_class
  { public static $my_prop ;

  }

方法C ...不会工作 ...使用通用设置器为特定属性分配值。我希望这种方法可以。

$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 ... WORKS ... 使用通用设置器在“匿名”注册表中分配值。我不喜欢这种方法,因为我不知道注册表中有什么。

$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 ;                    
      }
  }
4

1 回答 1

1

直接的解决方案是

class MyClass
{
    public static $property;
}

MyClass::$property = 'aaa';

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

于 2013-04-01T02:44:18.043 回答