rfc:reflectiontypeimprovements

This is an old revision of the document!


PHP RFC: ReflectionType Improvements

Introduction

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 those improvements.

Proposal

This RFC adds several new subtypes for ReflectionType; here is their stubs:

class ReflectionSingularType extends ReflectionType {
    public function getName(): string;
}
 
class ReflectionClassType extends ReflectionSingularType {
    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 and otherwise a plain ReflectionSingularType will be returned.

A call to the getName() method of a ReflectionSingularType 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.

Backward Incompatible Changes

There is a change for ReflectionType::__toString() which will now include a ? for nullable types. This change is justified for several reason:

  1. ReflectionType was introduced in 7.0 and therefore adoption is low
  2. The change reflects the intention of the meaning of __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.

PHP Version

This RFC targets PHP 7.Next which is currently version 7.1.

Unaffected PHP Functionality

ReflectionClass is unaffected; this only touches ReflectionType.

Voting

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 will be a simple yes or no for these changes.

Patches and Tests

The patch for this is not difficult; it will be coming soon.

rfc/reflectiontypeimprovements.1466007918.txt.gz · Last modified: 2017/09/22 13:28 (external edit)