sBogom
@sBogom
Начинающий web-дизайнер.

Каким образом работает метод call_user_func_array?

Всем привет. Работаю над первым собственным проектом. Поскольку я имею достаточно мало опыта в разработке, я прежде всего задумался над таким "тонким" моментом, как разделение данных сайта, пользовательского интерфейса и управляющей логики (MVC). Зайдя буквально на первую попавшуюся страницу, с описанием крокетной логики, я решил применить данную модель для своего сайта. Но возникли какие-то мне непонятные проблемы c функцией call_user_func_array. Собственно фрагмент кода вызывающий ошибку:
$controllerFile = ROOT.'/controller/'.$controller.'.php';
                if(file_exists($controllerFile)){
                    include $controllerFile;                                       
                }
                
                if(!is_callable(array($controller, $action))){
                    header("HTTP/1.0 404 Not Found");
                    return;
                }else{
                    call_user_func_array(array($controller, $action), $parametrs);
                    return;
                }


Нужная мне страница открывается корректно, данные отображаются, но вместе с этим выводится следующие сообщение:
5c0d03d8de5f9672182190.png
Если я не ошибаюсь, то функция call_user_func_array должна обратиться к классу $controller, передав параметры заключенные в $parametrs, в метод $action. Но почему-то call_user_func_array ругается на то, что данный метод класса не должен вызываться статично. Конечно мой вопрос может прозвучать глупо, для знающих людей, однако в чём проблема? Может я чего не понимаю или не знаю? Буду рад любой помощи. А кому совсем не в тягость, может рассказать о собственной методики реализации MVC.
  • Вопрос задан
  • 664 просмотра
Пригласить эксперта
Ответы на вопрос 1
Austin_Powers
@Austin_Powers
Web developer (Symfony, Go, Vue.js)
Обратите внимание на первый пример из документации.
В случае вызова нестатического метода класса Вам необходимо первым аргументом передавать массив, в котором лежит созданный объект класса и наименование метода.
Вы передаете наименование класса и наименование метода:
call_user_func_array(array($controller, $action), $parametrs);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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