2016-09-21 15:14 GMT+02:00 Nikita Popov <nikita....@gmail.com>:

> On Wed, Sep 21, 2016 at 10:55 AM, Nicolas Grekas <nicolas.gre...@gmail.com
> >
> wrote:
>
> > Hello,
> >
> > our turn to be hit by this 7.1 BC break in Symfony:
> > `ReflectionType::__toString()` now adds a `?` in front of type hints
> where
> > `null` is allowed by their default values.
> >
> > But since `zend_bool` is really an `unsigned char`, we have plenty of
> room
> > to store and forward this semantic subtlety (nullable being set through
> > `?Foo $arg` vs `Foo $arg = null`) so that `ReflectionType::__toString()`
> > can be accurate again, thus BC.
> >
> > See https://github.com/php/php-src/pull/2136
> >
> > Thank for you consideration of this patch.
> >
>
> I don't like this. The way I see it, either ReflectionType::__toString()
> gives you a complete representation of the type (which includes "?" no
> matter how you happen to write it in the source code) or it does not -- in
> which case this function is fundamentally broken and needs to go away. In
> other words, either we stick with the behavior currently implemented in PHP
> 7.1, or we go back to the PHP 7 behavior (there will never be a leading ?,
> it just returns the name) **and we deprecate the method**.
>
> I consider the last part important because going to the PHP 7 behavior
> fundamentally breaks the method (it is not actually a string representation
> of the type). Furthermore, this forces consumers of ReflectionType to
> switch to the new API based on getName() and isNullable().
>
> Nikita
>

As Nikita said, starting with PHP 7.1, we'll have ReflectionType::getName()
which does exactly what you want. You can use `__toString()` on previous
versions and use the proper `getName()` starting with PHP 7.1.

Regards, Niklas

Reply via email to