ReflectionParameter::getClass
(PHP 5)
ReflectionParameter::getClass — Get the type hinted class
Description
Gets the class type hinted for the parameter as a ReflectionClass object.
Warning
This function is currently not documented; only its argument list is available.
Parameters
This function has no parameters.
Return Values
A ReflectionClass object.
Examples
Example #1 Using the ReflectionParameter class
<?php
function foo(Exception $a) { }
$functionReflection = new ReflectionFunction('foo');
$parameters = $functionReflection->getParameters();
$aParameter = $parameters[0];
echo $aParameter->getClass()->name;
?>
The above example will output:
Exception
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Reflection
- Функция 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
- ReflectionParameter::hasType
- Функция 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
- Функция ReflectionParameter::__toString() - Преобразование в строку
Коментарии
The method returns ReflectionClass object of parameter type class or NULL if none.
<?php
class A {
function b(B $c, array $d, $e) {
}
}
class B {
}
$refl = new ReflectionClass('A');
$par = $refl->getMethod('b')->getParameters();
var_dump($par[0]->getClass()->getName()); // outputs B
var_dump($par[1]->getClass()); // note that array type outputs NULL
var_dump($par[2]->getClass()); // outputs NULL
?>
ReflectionParameter::getClass() will cause a fatal error (and trigger __autoload) if the class required by the parameter is not defined.
Sometimes it's useful to only know the class name without needing the class to be loaded.
Here's a simple function that will retrieve only the class name without requiring the class to exist:
<?php
function getClassName(ReflectionParameter $param) {
preg_match('/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches);
return isset($matches[1]) ? $matches[1] : null;
}
?>
Example of how to use getClass() in conjunction with getConstructor() to build the dependencies of a class.
private function buildDependencies(ReflectionClass $reflection)
{
$constructor = $reflection->getConstructor();
if (!$constructor) {
return [];
}
$params = $constructor->getParameters();
return array_map(function ($param) {
$className = $param->getClass();
if (!$className) {
throw new Exception();
}
$className = $param->getClass()->getName();
return $this->make($className);
}, $params);
}
For php version >=8
ReflectionParamter::getType() is the recommended way to replace the deprecated methods:
- getClass()
e.g: $name = $param->getType() && !$param->getType()->isBuiltin()
? new ReflectionClass($param->getType()->getName())
: null;
- isArray()
e.g: $isArray = $param->getType() && $param->getType()->getName() === 'array';
- isCallable()
e.g: $isCallable = $param->getType() && $param->getType()->getName() === 'callable';
This method is available in PHP 7.0 and later.
You may use this one function instead depricated
/**
* Get parameter class
* @param \ReflectionParameter $parameter
* @return \ReflectionClass|null
*/
private function getClass(\ReflectionParameter $parameter):?\ReflectionClass
{
$type = $parameter->getType();
if (!$type || $type->isBuiltin())
return NULL;
// This line triggers autoloader!
if(!class_exists($type->getName()))
return NULL;
return new \ReflectionClass($type->getName());
}