> -----Ursprüngliche Nachricht-----
> Von: Josh Watzman [mailto:jwatz...@fb.com]
> Gesendet: Mittwoch, 10. Dezember 2014 19:43
> An: Robert Stoll
> Cc: PHP internals
> Betreff: Re: [PHP-DEV] [RFC] Nullsafe calls
> 
> On Dec 10, 2014, at 8:17 AM, Robert Stoll <p...@tutteli.ch> wrote:
> 
> > First of all, I like the RFC, I think as well that it is a useful
> > feature for PHP and I already have it on my wish list
> > ;)
> >
> > Yet, either I misunderstand the section about short circuiting or I propose 
> > to change the behaviour.
> >
> > "If $obj is null, when $obj?->foo(..) executes, the arguments will still be 
> > evaluated."
> >
> > IMO that is wrong. It should not evaluate the arguments since the nullsafe 
> > operator (sometimes called "safe
navigation"
> > operator in other languages - which is the better wording IMO, maybe
> > change it? But that is just a detail) is just syntactic sugar for making 
> > the call only if $bj is not null. So the
following:
> >
> > [...]
> >
> 
> Take a look at the "short circuit" section where I specifically address this. 
> It was done to make it easier to reason
about in a
> side-effect-ful language like PHP. With this behavior, when you see
> 
> $x?->f(g(), h())
> 
> you don't have to worry about thinking whether g() and h() will actually be 
> evaluated or not -- only the call to f()
itself,
> which is explicitly marked as nullsafe (i.e., might not happen). It also 
> comes down to what you mean by "not making
the
> method call when $x is null" -- we in fact don't make the method call, but we 
> still prepare everything as if we were
going to,
> and just decide not to do it at the last moment.
> 
> I feel pretty strongly that this is the correct behavior. It may sound 
> strange when talking about isolated examples
like this,
> but in the real-world code I've seen, it is the least confusing. (I'll see if 
> I can dig up a better example instead of
just citing
> nebulous "real-world code" ;))
> 
> Josh
> 
> 
> --
> PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: 
> http://www.php.net/unsub.php

I stick with it, evaluating it does not make sense IMO. If I want to execute it 
in any case then I would do something
like this currently

$g = g();
$h = h();
if($x !== null){
  $x->foo($g, $h)->bar(baz());
}

And with the ?-> operator:

$g = g();
$h = h();
$x?->foo($g, $h)?->bar(baz());

Where I do not expect that baz() is called. You wrote it will be confusing for 
the user if the arguments would not be
evaluated. I do not think so, telling them it is a short form for ($x !== null 
? $x->foo() : null) is very easy and
straight forward for the user to pick up. Therefore, please dig up a better 
example. Right now,  I think it is a good
idea in general to add a nullsafe operator to PHP but not only in the way 
mentioned.



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to