Класс ReflectionParameter
(PHP 5, PHP 7)
Введение
Класс ReflectionParameter сообщает информацию об аргументах методов и функций.
Чтобы иметь возможность исследовать аргументы функции, сначала создайте представителя класса ReflectionFunction либо ReflectionMethod и затем используйте его метод ReflectionFunctionAbstract::getParameters() для получения массива аргументов.
Обзор классов
Свойства
- name
-
Имя аргумента. Доступно только для чтения и выбрасывает исключение ReflectionException при попытке записи.
Содержание
- ReflectionParameter::allowsNull — Проверяет, допустимо ли значение null для аргумента
- ReflectionParameter::canBePassedByValue — Проверяет, можно ли передать этот аргумент по значению
- ReflectionParameter::__clone — Копирующий конструктор
- ReflectionParameter::__construct — Конструктор класса
- ReflectionParameter::export — Экспорт
- ReflectionParameter::getClass — Получение класса из контроля типа
- ReflectionParameter::getDeclaringClass — Получение объявляющего класса
- ReflectionParameter::getDeclaringFunction — Получение объявляющей функции
- ReflectionParameter::getDefaultValue — Получение значения по умолчанию аргумента
- ReflectionParameter::getDefaultValueConstantName — Returns the default value's constant name if default value is constant or null
- ReflectionParameter::getName — Получение имени аргумента
- ReflectionParameter::getPosition — Получение позиции аргумента
- ReflectionParameter::getType — Gets a parameter's type
- ReflectionParameter::hasType — Checks if parameter has a type
- ReflectionParameter::isArray — Проверяет, ожидает ли аргумент массив в качестве значения
- ReflectionParameter::isCallable — Returns whether parameter MUST be callable
- ReflectionParameter::isDefaultValueAvailable — Проверяет доступно ли значение по умолчанию аргумента
- ReflectionParameter::isDefaultValueConstant — Returns whether the default value of this parameter is constant
- ReflectionParameter::isOptional — Проверка, является ли аргумент необязательным
- ReflectionParameter::isPassedByReference — Проверяет, что аргумент передан по ссылке
- ReflectionParameter::isVariadic — Checks if the parameter is variadic
- ReflectionParameter::__toString — Преобразование в строку
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Введение
- Установка и настройка
- Предопределенные константы
- Примеры
- Расширение
- Класс Reflection
- Класс ReflectionClass
- Класс ReflectionZendExtension
- Класс ReflectionExtension
- Класс ReflectionFunction
- Класс ReflectionFunctionAbstract
- Класс ReflectionMethod
- Класс ReflectionObject
- Класс ReflectionParameter
- Класс ReflectionProperty
- ReflectionType
- ReflectionGenerator
- Интерфейс Reflector
- Класс ReflectionException
Коментарии
I found these limitations using class ReflectionParameter from ReflectionFunction with INTERNAL FUNCTIONS (eg print_r, str_replace, ... ) :
1. parameter names don't match with manual: (try example 19.35 with arg "call_user_func" )
2. some functions (eg PCRE function, preg_match etc) have EMPTY parameter names
3. calling getDefaultValue on Parameters will result in Exception "Cannot determine default value for internal functions"
Signature of constructor of ReflectionParameter correctly is:
public function __construct(array/string $function, string $name);
where $function is either a name of a global function, or a class/method name pair.
The note about the signature of the ReflectionParameter constructor is actually incomplete, at least in 5.2.5: it is possible to use an integer for the second parameter, and the constructor will use it to return the n-th parameter.
This allows you to obtain proper ReflectionParameter objects even when documenting code from extensions which (strangely enough) define several parameters with the same name. The string-based constructor always returns the first parameter with the matching name, whereas the integer-based constructor correctly returns the n-th parameter.
So, in short, this works:
<?php
// supposing the extension defined something like:
// Some_Class::someMethod($a, $x, $y, $x, $y)
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 4);
// returns the last parameter, whereas
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 'y');
// always returns the first $y at position 2
?>
There are so many parameter modes now, and I needed to know exactly what `ReflectionParameter` is going to return, so I wrote a little test-script - you can find the script and results in a table here:
https://gist.github.com/mindplay-dk/082458088988e32256a827f9b7491e17