php доступ статический член по имени класса переменной - PullRequest
3 голосов
/ 27 мая 2011

Сейчас я работаю с платформой 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 принимает объект в качестве первого параметра, и он не подходит для этой цели

Google говорят:

$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 ]

6 голосов
/ 27 мая 2011
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
0 голосов
/ 27 мая 2011
call_user_func(array($myClassName, "static_method"));

Это основной способ сделать это.Я не совсем уверен, почему это может вызвать проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...