2009-09-02 2 views
3

Итак, у меня есть класс PHP, называемый маршрутизатором, который берет URL-адрес и взрывает его, чтобы найти запрошенный компонент, действие и любые заданные значения. Затем он загружает ответственный класс, запускает действие и т. Д. И т. Д. Теперь я интегрирую доступ пользователя к пользователю через класс пользователя.Статическая функция класса доступа через переменную

Для каждого компонента (который является классом) у меня есть переменная класса статического класса, называемая «perms», которая содержит каждое действие как индекс и число как минимальное разрешение, необходимое для запуска действия. Каждый компонент также имеет статическую функцию для получения значения разрешения для имени переданного действия.

Проблема, с которой я столкнулась, - заставить статическую функцию работать правильно с именем класса, хранящегося в переменной. В маршрутизаторе я использую переменную для хранения имени компонента.

$this->controller // cms, calendar ,etc 

Я затем добавить «Controller» к нему, чтобы получить имя класса

$class = $this->controller.'Controller'; // cmsController, calendarController, etc 

Однако я получаю сообщение об ошибке при попытке использовать его для получения доступа к статической функции

$minActionPerm = $class::getPerms($this->action); // No go, parse error 

У меня нет ошибки, когда я буквально печатаю имя класса, но это не настоящее решение.

$minActionPerm = cmsController::getPerms($this->action); // Good, but literal 

Эта переменная также работает, когда я создаю объект класса для запуска действия.

$object = new $class(); 

Я уверен, что это, вероятно, только простой ответ - такие, как переменная используется, но это один я не знаю как сейчас.

ответ

5

Вам необходимо использовать функцию call_user_func.

Пример:

call_user_func(array($class, 'getPerms'), $this->action); 

Если вы используете PHP 5.2.3+ вы также можете сделать это следующим образом:

call_user_func($class . '::getPerms', $this->action); 
Смежные вопросы