PHP 7.4.24 Released!

ReflectionParameter::getClass

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::getClassGet the type hinted class

Warnung

Diese Funktion ist seit PHP 8.0.0 DEPRECATED (veraltet). Von der Verwendung dieser Funktion wird dringend abgeraten.

Beschreibung

public ReflectionParameter::getClass(): ?ReflectionClass

Gets the class type hinted for the parameter as a ReflectionClass object.

As of PHP 8.0.0 this function is deprecated and not recommended. Instead, use ReflectionParameter::getType() to get the ReflectionType of the parameter, then interrogate that object to determine the parameter type.

Warnung

Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verf├╝gung.

Parameter-Liste

Diese Funktion besitzt keine Parameter.

R├╝ckgabewerte

A ReflectionClass object, or null if no type is declared, or the declared type is not a class or interface.

Beispiele

Beispiel #1 Using the ReflectionParameter class

<?php
function foo(Exception $a) { }

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

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

Siehe auch

add a note add a note

User Contributed Notes 5 notes

up
13
infernaz at gmail dot com
10 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
11
tom at r dot je
9 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
-1
tarik at bitstore dot ru
7 months 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
-1
Dylan
7 months 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
-4
richard dot t dot rohrig at gmail dot com
1 year 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