У меня есть функция, которая не принимает никаких параметров, т.е. function doSomething(){...}
.
Если я запустил, call_user_func_array('doSomething', array('param1' => 'something'));
он не возвращает ошибку.
Могу ли я заставить его вызвать ошибку, например: "Эта функция не должна принимать параметры".
Вполне возможно отправить больше параметров в определяемую пользователем функцию, чем определяет сигнатура функции. Это потому, что вы можете использовать дополнительный код в своей функции для их обработки или просто игнорировать их.
function doSomething(){
if (func_num_args() > 0) {
throw new Exception('Too many arguments');
}
....
}
Используйте что-то вроде выше, чтобы проверить аргументы, которые были переданы вашей функции
call_user_func_array
?
call_user_func_array('doSomething', array('param1' => 'something'));
не способствует проверке аргументов в массиве, когда вы определяете массив в реальном вызове, а не заранее .... но почему это такая проблема? Если ваш код выполняет вызов, то вы контролируете, что передается функции
Вы можете использовать func_num_args
:
function foo()
{
$n = func_num_args();
if ($n > 0) {
echo "Number of arguments: $n, 0 expected.";
return;
}
}
foo(1, 2, 3);
:: Информация
Проверьте класс ReflectionFunction. Используя это, вы можете определить, сколько параметров ожидает функция и не называть ее несоответствием.
func_num_args()
и, если необходимо, сгенерируйте исключениеcall_user_func()
, не имеет значения.