Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Узнать, сколько аргументов принимает функция

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Узнать, сколько аргументов принимает функция
MAXUS
Отправлено: 12 Ноября, 2014 - 20:04:37
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




Есть ли способ узнать, сколько аргументов ожидает функция? Например, чтобы предотвратить ошибку, когда в функцию передаются не все требуемые аргументы.

(Отредактировано автором: 12 Ноября, 2014 - 20:04:52)

 
 Top
teddy
Отправлено: 12 Ноября, 2014 - 20:16:40
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Есть.

PHP:
скопировать код в буфер обмена
  1. function hello($name, $age, $notRequired = null)
  2. {
  3.     //...
  4. }
  5.  
  6. $rFunction = new \ReflectionFunction('hello');
  7. var_dump($rFunction->getNumberOfParameters());
  8. var_dump($rFunction->getNumberOfRequiredParameters());


getNumberOfParameters - возвращает общее количество ожидаемых параметров.
getNumberOfRequiredParameters - возвращает количество обязательных параметров

Обязательными является те параметры, которые не имеют значения по умолчанию.

Аналогичные reflection-методы доступны через ReflectionMethod(если речь в данном случае идет о методах класса, тогда нужен именно ReflectionMethod )

(Отредактировано автором: 12 Ноября, 2014 - 20:24:37)

 
 Top
MiksIr
Отправлено: 12 Ноября, 2014 - 20:34:00
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


MAXUS пишет:
Есть ли способ узнать, сколько аргументов ожидает функция? Например, чтобы предотвратить ошибку, когда в функцию передаются не все требуемые аргументы.

Воспользоваться IDE


-----
self-banned
 
 Top
MAXUS
Отправлено: 12 Ноября, 2014 - 20:51:14
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




teddy пишет:
getNumberOfParameters - возвращает общее количество ожидаемых параметров.
getNumberOfRequiredParameters - возвращает количество обязательных параметров


Спасибо! Направление понял. Единственное, в php4 работать не будет?
(Добавление)
MiksIr пишет:
Воспользоваться IDE


А ватета не понял. Не соблаговолите расшифровать? Улыбка Вернее, расшифровать я расшифровал, но конкретно применительно к php это как выглядит?
 
 Top
teddy
Отправлено: 12 Ноября, 2014 - 21:05:22
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




MAXUS
Ниже PHP 5 работать не будет. А что, Вы все ещё 4 версией пользуетесь?Улыбка
 
 Top
OrmaJever Модератор
Отправлено: 12 Ноября, 2014 - 21:08:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




MAXUS пишет:
А ватета не понял. Не соблаговолите расшифровать? Вернее, расшифровать я расшифровал, но конкретно применительно к php это как выглядит?

открыть в редакторе файлик с функцией и посомтреть сколько и каких аргументов она принимает. По моему глупо использовать не знакомую функцию. Если вы не знаете сколько и каких аргументов она принимает то как вы можите быть уверен в возвращаемом значении?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 12 Ноября, 2014 - 21:35:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




И хочу напомнить, что даже обязательные параметры могут варьироваться, в том числе от других параметров этой же самой функции. printf, например.


-----
PostgreSQL DBA
 
 Top
teddy
Отправлено: 12 Ноября, 2014 - 21:36:35
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Согласен с OrmaJever.

Но иногда подобные возможности могут оказаться полезными.

Например, если мы разрабатываем программу, которая должна динамически отслеживать сколько/какого типа параметры ожидает некий метод. Как более точный пример можно указать реализацию Dependency Injector, который должен самостоятельно отслеживает куда и какие зависимости нужно внедрить. Если он не будет знать, экземпляр какого класса ожидает некий метод в качестве параметра, то успешно будет отхвачен Fatal error.
 
 Top
MiksIr
Отправлено: 13 Ноября, 2014 - 00:03:37
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Рефлексия, увы, весьма медленная штука. По-этому и стараются делать DI через конфиги, контейнеры и т.п.
И потом все-равно одного анализа мало, ибо он не дает ответа - синглтон нужно или новый инстанс, или какая реализация конкретного интерфейса нужна.
Хотя, наверно, такой инжектор кто только не писал =)

MAXUS пишет:
А ватета не понял. Не соблаговолите расшифровать? Вернее, расшифровать я расшифровал, но конкретно применительно к php это как выглядит?

Я к тому, что не нужно "предотвратить ошибку, когда в функцию передаются не все требуемые аргументы" в рантайме, эту ошибку нужно предотвратить в процессе разработки, и IDE в этом поможет.


-----
self-banned
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB