Req #79669 [Sus]: Nullable variables
| From: | requinix@php.net | 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