Сведения о вопросе

Drake

02:03, 17th August, 2020

Теги

PHP    

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

Просмотров: 297   Ответов: 4

Пишу свой велосипед для опыта, роутинг сделал как в 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 не получится использовать.


Или возможно другой выход из ситуации подскажите? Заранее премного благодарен.



  Сведения об ответе

crush

14:43, 14th August, 2020

  Сведения об ответе

prince

21:06, 1st October, 2020

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)


  Сведения об ответе

KOMP

21:06, 1st October, 2020

По моему лучше ловить ошибки на уровне функции, типа:

function my_action($param1 = null, $param2 = null) {
if($param1 === null) {
throw new Exception('');
}
}


  Сведения об ответе

repe

05:12, 29th August, 2020

А смотрели как CI сделано?


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться