Req #79669 [Com]: Nullable variables

From: Date: Wed, 03 Jun 2020 18:28:42 +0000
Subject: Req #79669 [Com]: Nullable variables
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227302@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 Comment by: valentiny510 at gmail dot com 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... 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 Previous Comments: ------------------------------------------------------------------------ [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 ------------------------------------------------------------------------ [2020-06-03 13:39:14] cmb@php.net This is obviously controversial (and there may be alternative solutions), so requires discussion for which this bug tracker is not suitable. Instead, please send a mail to the internals mailing list[1]. For the time being, I'm suspending this ticket. Thanks. [1] <https://www.php.net/mailing-lists.php#internals> ------------------------------------------------------------------------ [2020-06-03 12:05:56] valentiny510 at gmail dot com The example you gave $array['key'] ??= computeDefault(); is pointless, To ASSIGN a default value for $a can be achived "normally" $a = $b ?? compute_default( ); I want the ASSIGNMENT of $a to be NULLABLE if $b is NOT SET $a = $b; var_dump($a); null (without any errors!) So I don't want the MANUALLY write $array['key'] ??= NULL; COMPRENDE? Is the Exact behaviour I was talking about... Damn, you guys confused me for a bit ------------------------------------------------------------------------ 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 (#227302) next »