Re: [RFC] [DISCUSSION] Improve null-coalescing operator (??) adding empty check (??:)
| From: | Marco Pivetta | Date: | Wed, 17 Jan 2018 18:17:54 +0000 |
| Subject: | Re: [RFC] [DISCUSSION] Improve null-coalescing operator (??) adding empty check (??:) | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-101608@lists.php.net to get a copy of this message | ||
This:
echo (isset($foo) && $foo) ? $foo : 'default';
Is equivalent to:
echo $foo ?: 'default';
Please don't endorse usage of undefined variables.
On 17 Jan 2018 19:00, "Lito" <info@eordes.com> wrote:
> Related with Request #75833
> https://bugs.php.net/bug.php?id=75833
>
> From PHP 7 null-coalescing operator is a great option to avoid a previous
> exists check with isset.
>
> But I think that this comaparison can be improved adding a ternary
> operator like ??: and check also empty values.
>
> Example:
>
> --------------------------------------
>
> <?php
>
> $foo = '';
>
> // Current response with ternary operator
>
> echo $foo ?: 'default'; // 'defaut'
>
> // Current response with null-coalescing operator
>
> echo $foo ?? 'default'; // ''
>
> // Possible response with ternary null-coalescing operator
>
> echo $foo ??: 'default'; // 'defaut'
>
> // Same response with current PHP available code
>
> echo (isset($foo) && $foo) ? $foo : 'default'; // 'default'
>
> /** ------------------------------- **/
>
> $foo = false;
>
> // Current response with ternary operator
>
> echo $foo ?: 'default'; // 'defaut'
>
> // Current response with null-coalescing operator
>
> echo $foo ?? 'default'; // false
>
> // Possible response with ternary null-coalescing operator
>
> echo $foo ??: 'default'; // 'defaut'
>
> // Same response with current PHP available code
>
> echo (isset($foo) && $foo) ? $foo : 'default'; // 'default'
>
> /** ------------------------------- **/
>
> $foo = null;
>
> // Current response with ternary operator
>
> echo $foo ?: 'default'; // 'defaut'
>
> // Current response with null-coalescing operator
>
> echo $foo ?? 'default'; // 'defaut'
>
> // Possible response with ternary null-coalescing operator
>
> echo $foo ??: 'default'; // 'defaut'
>
> // Same response with current PHP available code
>
> echo (isset($foo) && $foo) ? $foo : 'default'; // 'default'
>
> /** ------------------------------- **/
>
> unset($foo);
>
> // Current response with ternary operator
>
> echo $foo ?: 'default'; // PHP Notice: Undefined variable: foo
>
> // Current response with null-coalescing operator
>
> echo $foo ?? 'default'; // 'defaut'
>
> // Possible response with ternary null-coalescing operator
>
> echo $foo ??: 'default'; // 'defaut'
>
> // Same response with current PHP available code
>
> echo (isset($foo) && $foo) ? $foo : 'default'; // 'default'
>
> --------------------------------------
>
> What about?
>
> Thanks!
> Lito.
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>