[RFC] [DISCUSSION] Improve null-coalescing operator (??) adding empty check (??:)
| From: | Lito | Date: | Wed, 17 Jan 2018 17:47:49 +0000 |
| Subject: | [RFC] [DISCUSSION] Improve null-coalescing operator (??) adding empty check (??:) | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-101606@lists.php.net to get a copy of this message | ||
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.