PHP 8.5.0 Alpha 2 available for testing

ReflectionParameter::getClass

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::getClassПолучает объект ReflectionClass для отражаемого параметра или null

Внимание

Функцию УДАЛИЛИ в PHP 8.0.0. Пользоваться функцией настоятельно не рекомендуют.

Описание

#[\Deprecated]
public ReflectionParameter::getClass(): ?ReflectionClass

Метод получает объект ReflectionClass для отражаемого параметра или null.

Начиная с PHP 8.0.0 метод устарел и им не рекомендуют пользоваться. Вместо него лучше вызывать метод ReflectionParameter::getType(), чтобы получить экземпляр отражения параметра — ReflectionType, а затем опросить этот объект, чтобы определить тип параметра.

Внимание

Функцию пока не задокументировали; для знакомства доступен только список аргументов.

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Метод возвращает объект класса ReflectionClass или null, если тип не объявили или если объявленный тип не принадлежит классу или интерфейсу.

Примеры

Пример #1 Пример получения объекта ReflectionParameter для отражаемого параметра

<?php

function foo(Exception $a) {}

$functionReflection = new ReflectionFunction('foo');
$parameters = $functionReflection->getParameters();
$aParameter = $parameters[0];

echo
$aParameter->getClass()->name;

?>

Список изменений

Версия Описание
8.0.0 Метод устарел в пользу метода ReflectionParameter::getType().

Смотрите также

Добавить

Примечания пользователей 5 notes

up
12
infernaz at gmail dot com
14 years ago
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

?>
up
10
tom at r dot je
13 years ago
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;
}
?>
up
4
Dylan
4 years ago
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.
up
1
tarik at bitstore dot ru
4 years ago
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());
}
up
-4
richard dot t dot rohrig at gmail dot com
5 years ago
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);
}
To Top