Как обратиться к статическому методу, имея только название класса в переменной? $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; Слишком длинное условие получается
Вы можете использовать функцию call_user_func() для вызова статического метода. В данном случае, если у вас есть название класса в переменной $module, можно вызвать статический метод следующим образом:
if(in_array(Router::$page,$modules)){ include self::PATH.Router::$page.'/index.php'; $className = ucfirst(Router::$page); // Преобразуем первую букву в заглавную букву call_user_func([$className, 'staticMethodName']); }else{ include self::PATH."show/index.php"; }
Данный код вызовет статический метод с названием 'staticMethodName' в классе, чье название хранится в переменной $className. Пожалуйста, убедитесь, что класс существует и содержит указанный статический метод.
Вы можете использовать функцию call_user_func() для вызова статического метода. В данном случае, если у вас есть название класса в переменной $module, можно вызвать статический метод следующим образом:
if(in_array(Router::$page,$modules)){include self::PATH.Router::$page.'/index.php';
$className = ucfirst(Router::$page); // Преобразуем первую букву в заглавную букву
call_user_func([$className, 'staticMethodName']);
}else{
include self::PATH."show/index.php";
}
Данный код вызовет статический метод с названием 'staticMethodName' в классе, чье название хранится в переменной $className. Пожалуйста, убедитесь, что класс существует и содержит указанный статический метод.