PHP: <?php $page = $_GET["p"]; $action = $_GET["action"]; $id = $_GET["id"]; $controller_name = $page; $model = $controller_name; $controller = "control_$controller_name"; $dispatch = new $controller ($model, $controller_name, $action); if (method_exists($controller, $action)) { call_user_func_array(array($dispatch, $action), $id); } else {/* some error*/} function __autoload ($class_name) {/* autoload classes and models */} ?> Перелопачиваю тут код один под себя, стараюсь максимум понять. Код выше рабочий. Но я не могу понять смысл двух функций... 1. В method_exists() входит $controller и $action. Ну с $action всё ясно. А вот с первым. В $controller записан "control_$controller_name", т.е. строка. В манке написано что нужен $object (обьект). Тут как? __autoload выручает создавая новый обьект по имени класса (хотя мы ж не обьявляли его!) или же откуда у нас в if() появляется TRUE? 2. Функция call_user_func_array() вообще сцуго загадочное явление. XD Насколько мне стало ясно по манке это "call_user_func_array -- Вызывает пользовательскую функцию с массивом параметров" (с) php.ru Первое мне не ясно тут нахрена нам тут array() ? Ну я ещё смогу понять зачем array() если в нём будут входные данные. Но у нас же там обьект и строка. Как это понимать то? При том что по мануалу чётко видно :
Просто я бы по другому писал бы. 1. if (method_exists($dispatch, $action)) 2. $dispatch->$action($id); Мне просто интересно почему автор использывал такой подход.
Честно говоря не понял смысл онной функции call_user_func_array(), точнее как её "разумно" использывать. Но хотелось бы узнать чем хуже использывать то что я привёл постом выше? Какие будут разности ну или потенциальные "дыры" в такой системе?
running-frag если у тебя один параметр, то разницы в принципе нету между твоим подходом и в первом посте (разве что твой более понятен). но если у тебя несколько параметров и количество их может различаться, то тут и поможет call_user_func_array().