Reflection Doesn’t Return Static

Reflection used to return the original static type, including its case. Since PHP 8.5, it is now returning the actual name of the class, instead of the relative type.

PHP code

<?php

// code from https://www.reddit.com/r/PHP/comments/1rd3j74/php_85_reflectionnamedtypegetname_change/
class Foo
{
    function poop (static $a): static
    {
    }
}

$refMethod = new ReflectionMethod('Foo', 'poop');
$refParam = $refMethod->getParameters()[0];

print_r(array(
    'paramType' => $refParam->getType()->getName(),
    'returnType' => $refMethod->getReturnType()->getName(),
));

?>

Before

Array
(
    [paramType] => static
    [returnType] => static
)

After

Array
(
    [paramType] => Foo
    [returnType] => Foo
)

PHP version change

This behavior changed in 8.5

See Also