Req #79669 [Com]: Nullable variables
| From: | valentiny510 at gmail dot com | 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