> Am 4.6.2016 um 15:48 schrieb Niklas Keller <m...@kelunik.com>:
> 
> Massive is a nice hyperbole here...
> Sure, you can check it manually… but why not just always check it manually 
> then?
> You then loose possibilities to reflect on it, have static analysis rely on 
> code only [currently you always have to check docblocks when it's not 
> declared; definitely not an option for e.g. Optimizer], and a single 
> signature is generally easier to parse for a human.
> 
> Talking about reflection, I'm not happy with the currently proposed solution.
> 
> > ReflectionType::__toString() will now provide a full union type as string; 
> > e.g. “int | float | NumberObject”.

What should it return then, if not this? ReflectionUnionType provides a 
getTypes() method returning you an array of ReflectionType classes you can 
access for their individual type.

> That requires libraries like Auryn to manually parse that string now. It's no 
> longer possible to directly use __toString to get the class name. Isn't there 
> a better solution?

You’ll have to change your code to respect union types and eventually call 
ReflectionUnionType::getTypes() in case instanceof returns true.
There are already suggestions to give it a better structure (I can only 
reference 
https://www.reddit.com/r/PHP/comments/4m93s1/i_want_to_enhance_and_break_the_reflectiontype/
 
<https://www.reddit.com/r/PHP/comments/4m93s1/i_want_to_enhance_and_break_the_reflectiontype/>
 here), but fixing this (along with proper nullable handling etc.) is outside 
of the scope of this RFC.

> What about ReflectionType::isBuiltin()? What will it return? Just false? True 
> if only built in types are used?

false. The individual ReflectionTypes in the array returned by 
ReflectionUnionType::getTypes() will be telling you what they are.

> I think allowsNull can be handled as is.

Correct.

Bob

Reply via email to