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

时间:2011-05-27 16:58:57

标签: php class static yii

现在我正在使用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将object作为第一个参数,它不适合此目的

谷歌说:

$a = constant($myClassName . "::CONSTANT");
$b = call_user_func(array($myClassName, "static_method"));
它看起来像是一个可怕的平静。使用它可能会带来许多麻烦。另一个解决方案?

哦!我的问题是另一个问题:

$controller::$NAME::model() // error

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

感谢

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

call_user_func(array($myClassName, "static_method"));

这是实现它的主要方式。我不太清楚为什么这会导致任何问题。