Req #79669 [Sus]: Nullable variables

From: Date: Wed, 03 Jun 2020 18:51:15 +0000
Subject: Req #79669 [Sus]: Nullable variables
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227304@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79669&edit=1 ID: 79669 Updated by: requinix@php.net Reported by: valentiny510 at gmail dot com Summary: Nullable variables Status: Suspended Type: Feature/Change Request Package: Variables related Operating System: nix PHP Version: Next Major Version Block user comment: N Private report: N New Comment: > You don't get it either... Let me spell this out for you: 1 <?php 2 3 $a = $b; 4 $c = @$d; Line 3 produces a warning. Of course it does. Line 4 DOES NOT. Previous Comments: ------------------------------------------------------------------------ [2020-06-03 18:48:48] valentiny510 at gmail dot com Just think what the coalence operator do (in +/- english...) $a = $b ?? null; 1. create $a = 2. Evaluate the "expression $b" to null 3. go to the next "expression" 4. Evaluate the "expression null" to null 5. ask if there are more expressions and if there are not return the null from step 4 The step 2 was ALREADY EVALUATED to null, and I can I ASK the parser, "If you find this operator, (placeholder)... give me whatever you Evaluated on the step 2 no matter what it is, its value or null otherwise" so it will skip all the next steps 3, 4, 5, etc... and as you can see, there are Two expressions that evaluates to null, and is why I said I think that is a bit redundant, and maybe... just maybe, returning whatever it is in the step 2 can improve the speed in some cases. ------------------------------------------------------------------------ [2020-06-03 18:28:42] valentiny510 at gmail dot com You don't get it either... Your example "https://3v4l.org/03cuu" produce the same error for Either... $a = @$b; or @$a = $b; "Notice: Undefined variable: b in /in/03cuu on line 3" I want to get rid of the error message and have a short operator that assign the null to the variable $a automatically but ONLY IF $b doesn't exists... like "self casting to null" or similar... $a = (null?) $b; I really don't know what to say to make myself understandable more than I already did... Thank you for your time guys ------------------------------------------------------------------------ [2020-06-03 17:55:23] requinix@php.net > $a = @$b; (btw this doesn't work either...) Yes it does. https://3v4l.org/03cuu For more complicated expressions you can promote the @ to the whole assignment: > @$a = $b + $c; ------------------------------------------------------------------------ [2020-06-03 14:37:02] valentiny510 at gmail dot com ups, typo... instead of $a |= $b; I meant... $a \= $b; (my pinky didn't reached that far) ------------------------------------------------------------------------ [2020-06-03 14:30:29] valentiny510 at gmail dot com To resume... Yes, having the "Undefined variable: x" error is good, unless you Specifically supress that error with a mechanism like, $a = @$b; (btw this doesn't work either...) When I say I was looked at the RFC before, it was because I thought for a split second that the equal sign changed the behaviour and NULLIFY the $b variable, but then I was like "nah.. not possible", and of course is not... The coalesce operator is Great, with the small exception that you MUST have a FALLBACK value, EVEN IF that value is NULL... What I requested is an operator that doesn't require any FALLBACK and automatically NULLIFY the ASSIGMENT There are plenty of options, aside from the ones I already mentioned, maybe even we can reuse the "old" ternary/elvis operator like this $a = $b ?:; without requiring to have the last value either Some examples... $a = ?$b; # like nullable types (but require to have at least one space in between...) $a =? $b; # preferred operator (so the parser can ignore all the spaces...) $a = @$b; # maybe supress the error and return null? $a ?= $b; # one sign to not interfere with ??= $a = $b ?:; # elvis2.0? but why not shorter... $a = $b ?; # the parser can say "after ? if you find ; assign null" $a |= $b; # weird but... There are so many other symbols to choose from... Is not that hard to understand what I want ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=79669 -- Edit this bug report at https://bugs.php.net/bug.php?id=79669&edit=1

« previous php.bugs (#227304) next »