> -----Ursprüngliche Nachricht----- > Von: Andrea Faulds [mailto:a...@ajf.me] > Gesendet: Mittwoch, 10. Dezember 2014 20:21 > An: Josh Watzman > Cc: PHP internals > Betreff: Re: [PHP-DEV] [RFC] Nullsafe calls > > Hi again. > > > On 10 Dec 2014, at 19:11, Josh Watzman <jwatz...@fb.com> wrote: > > > > On Dec 10, 2014, at 9:19 AM, Andrea Faulds <a...@ajf.me> wrote: > > > >> First, how is this substantially different from catching an exception? > >> With Nikitas Exceptions in the Engine RFC, > something like this would be possible: > >> > >> try { > >> return $foo->bar()->qux()->elePHPant()->dance(); > >> } catch (EngineException $e) { > >> return NULL; > >> } > >> > >> That would essentially do the same as what youre proposing: > >> > >> return $foo?->bar()?->qux()?->elePHPant()?->dance(); > >> > >> Are there many instances where thered be a substantial benefit to using > >> ?-> versus catching an exception? > > > > It's an API decision up to the implementors of the object. If you like > > using exceptions for *every* failure, then go for it, this syntax > > won't cost you anything or get in your way :) > > > > However, for a lot of failures, I don't feel that exceptions are > > appropriate. I tend to only use them for exceptional > behavior -- usually, some failure that needs to be propagated up a few levels > up the stack, to an appropriate error > boundary. This doesn't necessarily mean a completely unrecoverable error, but > it's *locally* unrecoverable. For things that > are completely recoverable, returning null might be more appropriate and more > lightweight, and then this nullsafe > operator would be useful at that point. > > huh? Im not talking about exceptions the object itself throws. In PHP 7, if > Nikitas RFC passes, trying to call a method on > NULL will throw an exception. That largely negates the need for a special > operator, since you can just catch the exception. > > Thanks. > -- > Andrea Faulds > http://ajf.me/ > > -- > PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: > http://www.php.net/unsub.php
I think it is a matter of taste whether you use try/catch as control structure or only as exception handling. I for myself usually try to avoid using it as control structure and thus would write something like: if($a !== null){ $a->foo(bar()); } And for this case the ?-> operator seems perfect for me - as long as it does not evaluate bar(). -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php