That still means that code designed for 7.0 will break while reflecting 7.0
code (`= null` scenario) when run on 7.1, effectively preventing upgrade,
Niklas.

On 21 Sep 2016 15:27, "Niklas Keller" <m...@kelunik.com> wrote:

> 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