Req #79669 [Com]: Nullable variables
| From: | valentiny510 at gmail dot com | Date: | Wed, 03 Jun 2020 18:48:48 +0000 |
| Subject: | Req #79669 [Com]: Nullable variables | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227303@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:
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.
Previous Comments:
------------------------------------------------------------------------
[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
------------------------------------------------------------------------
[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>
------------------------------------------------------------------------
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