php通过变量类名访问静态成员

问题描述

| 现在,我正在使用yii框架,我想编写如下内容
protected static $model = \"Customer\";
...
public function actionIndex() {
    $model::model()->find(...
现在可以正常工作:
protected static $model = \"Customer\";
protected static $model_obj;
...
public function __construct($controller,$id) {
    $this->model_obj = new self::$model;
...
public function actionIndex() {
    $model_obj::model()->find(...
但是为访问静态成员创建对象是一件坏事。 如何避免呢? getClass将对象作为第一个参数,因此不适合此目的 谷歌说:
$a = constant($myClassName . \"::CONSTANT\");
$b = call_user_func(array($myClassName,\"static_method\"));
看起来像是可怕的狗屎和平。使用它可能会带来很多麻烦。另一个解决方案? 哦!我的问题是另一个
$controller::$NAME::model() // error

$controller_name = $controller::$NAME
$controller_name::model() // good
谢谢     

解决方法

        
class foo
{
  public static function bar()
  {
    return 42;
  }
}

// class name as string

$class = \'foo\';

var_dump($class::bar()); // 42

// method name as string

$method = \'bar\';

var_dump(foo::$method()); // 42

// class AND method names as strings

var_dump($class::$method()); // 42
    ,        
call_user_func(array($myClassName,\"static_method\"));
是做到这一点的主要方法。我不太确定为什么会引起任何问题。