Статическая функция класса доступа через переменную

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

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

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

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

Затем я добавляю ему «Контроллер», чтобы получить имя класса

 $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(); 

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

Related of "Статическая функция класса доступа через переменную"

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

Пример:

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

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

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