PHP: Reflection API - ReflectionParameter
Класс ReflectionParameter предоставляет методы для работы с параметрами методов классов, а так же с параметрами функций.
ReflectionParameter implements Reflector
/* Свойства */
- public $ReflectionParameter->name;
/* Методы */
Конструктор класса. Первый параметр - строка имя функции, второй параметр... имя параметра который нас интересует:
$param = new ReflectionParameter( 'date', 'format' ); var_dump( $param );
выведет:
object(ReflectionParameter) #1 (1) { ["name"]= > string(6)"format" }
Вторым параметром можно передать и номер позиции параметра. Нумерация начинается с нуля:
Нумерация позиций параметров начинается с нуля:
$param = new ReflectionParameter( 'date', 0 ); var_dump( $param );
выведет:
object(ReflectionParameter) #1 (1) { ["name"]= > string(6)"format" }
... - да можно вызывать этот конструктор и для создания отражений параметров методов, хотя в доках на php.net я этого не нашёл. Для этого нужно первым параметром передать индексный массив, первый элемент которого может быть либо строкой - именем класса, либо объектом, а второй элемент это строка - имя метода. Второй параметр может быть так же либо строкой - именем, либо целым числом - номером позиции параметра:
class Foo { public function bar($a=456){} } $param = new ReflectionParameter( array( 'Foo', 'bar'), 'a' ); $param1 = new ReflectionParameter( array( new Foo, 'bar'), 'a' ); $param2 = new ReflectionParameter( array( new Foo, 'bar'), 0 ); var_dump( $param ); var_dump( $param1 ); var_dump( $param2 );
выведет:
object(ReflectionParameter) #1 (1) { ["name"]= > string(1)"a" } object(ReflectionParameter) #2 (1) { ["name"]= > string(1)"a" } object(ReflectionParameter) #3 (1) { ["name"]= > string(1)"a" }
Проверка допускает ли параметр значение NULL.
$param = new ReflectionParameter( array('PDO','__construct'), 'dsn' ); if ( $param->allowsNull() ) { echo 'Параметр допускает пустое значение'; } else { // Для класса PDO сработает этот блок. echo 'Параметр НЕ допускает пустое значение'; }
Проверка, может ли значение параметра быть передано по ссылке.
Экспорт отражения параметра. Первый аргумент - строка имя функции, второй - строка имя параметра, третий параметр bool - позволяет указать, куда помещать вывод: true - вернёт из метода как строку, false - выведет на экран. Как и в случае с конструктором класса, первый параметр может быть и массивом, а второй числом:
ReflectionParameter::export('date', 0 ) ; //Parameter #0 [ $format ] ReflectionParameter::export( array('PDO', '__construct'), 'dsn' ) ; // Parameter #0 [ $dsn ] ReflectionParameter::export( array('PDO', '__construct'), 0 ) ; // Parameter #0 [ $dsn ]
Метод возвращает объект класса ReflectionClass, если параметр был специфицирован классом (в примере ниже, первый параметр - $c метода foo класса Basic - специфицирован классом SomeClass), и NULL в противном случае. Здесь понятнее будет на примере:
class Basic { function foo( SomeClass $c, array $d, MoreClass $e) {} } class SomeClass {} // Следует заметить, если объявления классов // на данный момент будут не доступны PHP выдаст: // Fatal error: Uncaught exception 'ReflectionException' with message 'Class MoreClass does not exist' class MoreClass {} $refl = new ReflectionClass('Basic'); $par = $refl->getMethod('foo')->getParameters(); var_dump($par[0]->getClass()->getName()); // выведет SomeClass var_dump($par[1]->getClass()); // заметьте, тип массив - выдаст NULL var_dump($par[2]->getClass()); // ReflectionClass info
Эти строки дадут такой результат:
string(9)"SomeClass" NULL object(ReflectionClass) #2 (1) { ["name"]= > string(9)"MoreClass" }
Возвращает информацию о классе исследуемого параметра
Возвращает информацию о функции исследуемого параметра:
$param = new ReflectionParameter('date', 0); var_dump( $param->getDeclaringFunction() );
выведет:
object(ReflectionFunction) #2 (1) { ["name"]= > string(4)"date" }
Позволяет получить дефолтное значение параметра:
function foo($test, $bar = 'baz') { echo $test . $bar; } $function = new ReflectionFunction('foo'); foreach ($function->getParameters() as $param) { echo 'Name: ' . $param->getName() . PHP_EOL; if ($param->isOptional()) { echo 'Default value: ' . $param->getDefaultValue() . PHP_EOL; } echo PHP_EOL; }
Эти строки дадут такой результат:
Name: test Name: bar Default value: baz
Получает имя параметра.
Получает позицию параметра. Позиции начинаются с нуля!
Проверяет, является ли параметр массивом.
Проверяет, является ли значение по умолчанию параметра - доступным. Если честно я ни хрена не понял про эту штуку.
Проверяет является ли параметр опциональным ( необязательным ).
Проверяет, передается ли параметр по ссылке.
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.