Как узнать стандартными средствами PHP, требуются ли аргументы для вызова метода?

Пишу свой велосипед для опыта, роутинг сделал как в CI:


CodeIgniter использует подход, основанный на сегментах адреса:
www.your-site.com/news/article/my_article


Сегменты в URL, соответствуют архитектуре Модель-Отображение-Контроллер и, как правило, строятся таким образом:
www.your-site.com/class/function/arg


В первом сегменте описывается контроллер class к которому происходит обращение.

Во втором сегменте происходит ссылка на функцию function или метод, который необходимо вызвать.

В третьем и последующих сегментах описываются переменные, которые будут переданы в эту функцию.


В CI метод может выглядеть к примеру вот так:


function hello ($name, $id) {

echo "\$name = $name";

echo "

";

echo "$id";


}


Теперь вопрос, в случаи, если в url не был передан один из аргументов для метода, естественно возникает ошибка.

Как можно проверить сколько аргументов требуется для вызова метода? Проверить нужно до вызова, поэтому func_num_args не получится использовать.


Или возможно другой выход из ситуации подскажите? Заранее премного благодарен.
  • Вопрос задан
  • 3695 просмотров
Пригласить эксперта
Ответы на вопрос 3
m00t
@m00t
php.net/manual/en/book.reflection.php
function test_function($param1, $param2 = NULL)
{
	echo $param1;
}

$ref_function = new ReflectionFunction('test_function');

foreach($ref_function->getParameters() as $param)
{
	var_dump($param->isOptional());
}

var_dump($ref_function->getNumberOfRequiredParameters());

выведет:
bool(false)
bool(true)
int(1)
Ответ написан
MyraJKee
@MyraJKee
По моему лучше ловить ошибки на уровне функции, типа:

function my_action($param1 = null, $param2 = null) {
if($param1 === null) {
throw new Exception('');
}
}
Ответ написан
@yul
программист-фрилансер
А смотрели как CI сделано?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 18:16
1000 руб./за проект
28 мар. 2024, в 18:15
90000 руб./за проект
28 мар. 2024, в 18:05
5000 руб./за проект