Req #79669 [Com]: Nullable variables

From: Date: Wed, 03 Jun 2020 14:30:29 +0000
Subject: Req #79669 [Com]: Nullable variables
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227297@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: 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 Previous Comments: ------------------------------------------------------------------------ [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 ------------------------------------------------------------------------ [2020-06-03 12:02:37] bugreports at gmail dot com > $a ??= $b; > where $b doesn't exists, still throw the error "Undefined variable: $b" which is a good thing, i haven't seen "Undefined variable" in code which should not be fixed the last 15 years and you should ask yourself why $b is undefined here ------------------------------------------------------------------------ [2020-06-03 11:51:13] valentiny510 at gmail dot com oh sorry, is implemented, BUT... it DOESN'T do what I want, I don't want to set a "default" $a ??= $b; where $b doesn't exists, still throw the error "Undefined variable: $b" ------------------------------------------------------------------------ [2020-06-03 11:50:03] bugreports at gmail dot com > What version? I have seen the RFC, but I don't think is implemented yet why don't you just do your homework and at least read the feature page of each new release or at least try it out instead of thinking? > and still ??= is 1 character larger than =? that's ridiculous and null coalescing is always ?? so you don't have any point because it's more important to be consistent within a programming language instead save one char https://www.php.net/manual/de/migration74.new-features.php Null coalescing assignment operator ¶ <?php $array['key'] ??= computeDefault(); // is roughly equivalent to if (!isset($array['key'])) { $array['key'] = computeDefault(); } ?> ------------------------------------------------------------------------ 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 (#227297) next »