ReflectionNamedType::getName

(PHP 7 >= 7.1.0, PHP 8)

ReflectionNamedType::getNameGet the name of the type as a string

Description

public ReflectionNamedType::getName(): string

Parameters

This function has no parameters.

Return Values

Returns the name of the type being reflected.

See Also

add a note

User Contributed Notes 1 note

up
2
e3jeremy at gmail dot com
5 years ago
Method "getName" is available when you access getType from getParameters from class reports information of a method(ReflectionMethod).
No need to instantiate the ReflectionNamedType.

Below is my custom method on resolving method dependencies, getName is a big help.

<?php

class A
{
public function
my()
{
return
' My ';
}
}

class
B
{
public function
__construct(A $a)
{
$this->a = $a;
}

public function
hello($string)
{
return
'Hello' . $this->a->my() . $string . '.';
}
}

class
C
{
public function print(
$instance, $method)
{
$params = ['World'];

echo
call_user_func_array(array($instance, $method), array_merge($this->resolveMethodDependencies($instance, $method), $params));
}

public function
instantiate($class)
{
if(
method_exists($class, '__construct')) $instance = new $class(...$this->resolveMethodDependencies($class, '__construct'));
else
$instance = new $class;

return
$instance;
}

protected function
resolveMethodDependencies($class, $method)
{
$params = [];
$reflection = new \ReflectionMethod($class, $method);

foreach (
$reflection->getParameters() as $param) {

if(
$type = $param->getType()) {

if(!
$type || !$this->instatiatable ($type)) continue;

// This is the right way to get the class name in string.
$className = $type->getName();

// This will throw error.
// $className = $param->getType();

// Alos this one will do the trick.
// $className = (string) $param->getType();

if(method_exists($className, '__construct')) {
$params[] = new $className(...$this->resolveMethodDependencies($className, '__construct'));
continue;
}

$params[] = new $className;
}
}
return
$params;
}

protected function
instatiatable ($type)
{
// Add conditon if something is leftout.
// This is to ensure that the type is existing class.
return $type != 'Closure' && !is_callable($type) && class_exists($type);
}
}

$class = new C;

$class->print(
$class->instantiate('B'), 'hello'
);

Output:
Hello My World.
To Top