Поэтому у меня есть класс 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();
Я уверен, что это, вероятно, простой ответ – например, использование переменной, но это тот, о котором я не знаю сейчас.
Вам нужно использовать функцию call_user_func
.
Пример:
call_user_func(array($class, 'getPerms'), $this->action);
Если вы используете PHP 5.2.3+, вы также можете сделать это следующим образом:
call_user_func($class . '::getPerms', $this->action);