Как передать аргументы в неизвестную функцию? Здравствуйте! Имеется класс, который загружает другой класс в свойство $obj. Далее методом __call из загруженного класса возможен вызов функций. Пока имеется такой код:public function __call($function, $args){ $arg_str = ''; $count = count($args); if($count > 0) for($i = 0; $i obj->'.$function.'('.$arg_str.');'); } возможно ли более правильное решение? Спасибо.
Да, более правильным и безопасным решением было бы использование функции call_user_func_array для передачи аргументов в неизвестную функцию. Вот пример кода:
public function __call($function, $args){ if(method_exists($this->obj, $function)){ return call_user_func_array(array($this->obj, $function), $args); } else { // обработка ошибки в случае отсутствия метода throw new Exception('Метод ' . $function . ' не найден в загруженном классе'); } }
Таким образом, мы проверяем существование вызываемого метода в загруженном классе и при его наличии вызываем этот метод, передавая ему аргументы через call_user_func_array. В случае отсутствия метода будет выброшено исключение.
Да, более правильным и безопасным решением было бы использование функции call_user_func_array для передачи аргументов в неизвестную функцию. Вот пример кода:
public function __call($function, $args){if(method_exists($this->obj, $function)){
return call_user_func_array(array($this->obj, $function), $args);
} else {
// обработка ошибки в случае отсутствия метода
throw new Exception('Метод ' . $function . ' не найден в загруженном классе');
}
}
Таким образом, мы проверяем существование вызываемого метода в загруженном классе и при его наличии вызываем этот метод, передавая ему аргументы через call_user_func_array. В случае отсутствия метода будет выброшено исключение.