Re: Re: New operator suggestion

From: Date: Sat, 04 Sep 2021 22:56:07 +0000
Subject: Re: Re: New operator suggestion
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-115951@lists.php.net to get a copy of this message
Well, yes, but not exactly. What I dislike on ?? operator is, that it supress all warnings in the expression - in my opinion it shares the same issue as @ operator and why people discourage other to use it - because it may supress far more errors than you want to supress. And this is the case with $var->prop1->prop2 - when I expect just prop2 being undefined, it supresses even error of undefined $var, which might not be intentional and I miss that error because of that. So suggested ??: operator should behave like ??, but without the supression mechanic - just short hand for "$x === null ? $x : expr" instead of "isset($x) ? $x : expr". The 2nd case you wrote is actually even weird to me - I am not sure at all if PHP should behave like that. Because in your example, when $var is undefined: $var->prop1->prop2 ?? '' does not emit any error, because ?? supresses them $var?->prop1?->prop2 ?? '' does emit error - which is weird, since ?-> is still wrapped under ??, so I am not sure why error shows here. Anyway what I want is emitting error on undefined $var and undefined prop1, but NOT undefined prop2, when: $var->prop1?->prop2 ??: '' Do you get it? Just a shorthand for this: $var->prop1?->prop2 === null ? $var->prop1->prop2 : ''; Which any of suggested current solutions can't do. David On 05.09.2021 0:42, Ben Ramsey wrote:
David Kolář wrote on 9/4/21 17:19:
Back to the suggestion - I suggest creating a new IFNULL operator, which will simply test if expression is null. If not, it returns left-hand part, if yes, it returns right-hand part.
This is already what the ?? operator does. For example: https://3v4l.org/RlDjK Are you suggesting that it should emit a warning if $var is undefined, as it does in this case? https://3v4l.org/aZAj0 Cheers, Ben


« previous php.internals (#115951) next »