For PHP 7.0 the ReflectionType
API was introduced in conjunction with return types. Its minimal API was intended to be the base for future improvements; this RFC contains some of those improvements.
This RFC adds two new subtypes for ReflectionType
; here are their stubs:
class ReflectionNamedType extends ReflectionType { public function getName(): string; } class ReflectionClassType extends ReflectionNamedType { public function getClass(): ReflectionClass; }
If the engine does not recognize a type it will call the autoloader; if the class is found then a ReflectionClassType
will be returned. Presently in all other cases a plain ReflectionNamedType
will be returned but this may change in the future. For instance if we had intersection types they would be unnamed and therefore would be different subtype of ReflectionType
.
A call to the getName()
method of a ReflectionNamedType
that represents any of int
, ?int
or int $foo = null
will return int
in each case. Note that the __toString
method would return int
, ?int
and ?int
respectively. Note that the names of builtin types are normalized, so getName()
on builtin types will always be in lower case and thus safe for string comparisons.
There is a change for ReflectionType::__toString()
which will now include a ?
for nullable types. This change is justified for several reason:
ReflectionType
was introduced in 7.0 and therefore adoption is low__toString
to be the string representation of the type that would pass syntax checking. Unfortunately this intention wasn't formally documented thus classifying this as a BC break.This RFC targets PHP 7.Next which is currently version 7.1.
ReflectionClass
is unaffected; this only touches ReflectionType
.
It is unclear if voting requires 50%+1 or 2/3. On one hand this is not a language change but on the other this does contain a BC break. Rather than debating it one way or the other I've chosen to require 2/3.
The vote is a simple yes or no for these changes. Voting opened 2016-06-30 and will close 2016-07-08.
The patch for this is not difficult; it will be coming soon.