Как обратиться к статическому методу, имея только название класса в переменной?

$modules = array(
       'catalog', 'shop', 'user', 'news', 'page', 'mail'
);
if(in_array(Router::$page,$modules)){
      include self::PATH.Router::$page.'/index.php';
      // как обратится к статическому методу, имея подключенный класс и название класса в Router::$page?
}else{
      include self::PATH."show/index.php";
}


В данном коде подключается класс include self::PATH.Router::$page.'/index.php';
Далее нужно имея название класса $modules обратится к статическому методу, как это сделать?

Отказался от
swith(Router::$page){
     case "main"
            include 'class/main/index.php';
            main::show();
      break;

Слишком длинное условие получается
  • Вопрос задан
  • 2296 просмотров
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
call_user_func, в мануале описаны подходящие способы вызова.
Ответ написан
Комментировать
<?php

class MyPage {
    static public function show() {
        print __METHOD__ . ' Args: ' . print_r( func_get_args(), true );
    }
}

class Router {
    static public $page = 'MyPage';
}

// способ 1
$page = Router::$page;
$page::show();

// способ 2
call_user_func_array( array( Router::$page, 'show' ), array(
    'something', 'args'
) );

результат
MyPage::show Args: Array
(
)

MyPage::show Args: Array
(
    [0] => something
    [1] => args
)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы