Re: Inline conditional that returns null if falsy
| From: | Albert Casademont | Date: | Tue, 23 Feb 2021 16:49:27 +0000 |
| Subject: | Re: Inline conditional that returns null if falsy | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-113232@lists.php.net to get a copy of this message | ||
Another example is when a scalar input needs to be either left null or
converted to a Value Object:
$color = $data['color'] ? new Color($data['color']) : null;
This would become;
$color = $data['color'] ? new Color($data['color']); //the ": null"
part is
implicit
It's actually kinda the inverse of the "?:" operator.
As Guilliam said, Twig already implements such behaviour, it's quite handy
when dealing with nullable variables,
On Tue, Feb 23, 2021 at 4:26 PM Chase Peeler <chasepeeler@gmail.com> wrote:
> On Tue, Feb 23, 2021 at 9:31 AM Nikita Popov <nikita.ppv@gmail.com> wrote:
>
> > On Fri, Feb 12, 2021 at 8:25 PM David Rodrigues <david.proweb@gmail.com>
> > wrote:
> >
> > > Hello!
> > >
> > > It is just a suggestion to be discussed.
> > >
> > > A lot of places on my projects I have codes like:
> > >
> > > $companies = $user->companies->count()
> > > ? new Collection($user->companies)
> > > : null;
> > >
> > > So $companies will be null except if the user has companies.
> > >
> > > My suggestion is create some kind of inline conditional to works like
> > that:
> > >
> > > $companies = $user->companies->count() => new
> > Collection($user->companies);
> > >
> > > If the conditional ($user->companies->count()) is true, then will
> return
> > > the value (after =>), else will be null.
> > >
> > > In my current work project, I have more than 100+ occurrences like
> that.
> > >
> > > So some more examples:
> > >
> > > $userCategory ? $userCategory->getTitle() : null
> > > -> It could be optimized to the new nullsafe operator
> > > $userCategory?->getTitle()
> > >
> > > return $languageFirst instanceof LanguageExperience
> > > ? $languageFirst->title : null;
> > > -> This not, with my suggestion we have:
> > > return $languageFirst instanceof LanguageExperience =>
> > > $languageFirst->title;
> > >
> > > The => is just a suggestion, other options using existing keywords is:
> > > return expr() then output();
> > > return expr(): output();
> > >
> > > I do not know if other languages support something like that.
> > >
> > > Thanks!
> > >
> >
> > There's a limited budget for this kind of syntax sugar, and we already
> have
> > ?:, ??, ??=, ?->. I don't think there's space for yet another shorthand
> > conditional syntax.
> >
> >
> I don't really have any strong feelings on this either way, but ?! seems
> like a logical choice if it was to be implemented.
>
>
> > Note that => cannot be used for this purpose, as it is already used for
> > array literals.
> >
> > Regards,
> > Nikita
> >
>
>
> --
> Chase Peeler
> chasepeeler@gmail.com
>