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.
This:
echo (isset($foo) && $foo) ? $foo : 'default';
Is equivalent to:
echo $foo ?: 'default';
Please don't endorse usage of undefined variables.
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.
No $foo ?: 'default' , it's only equivalent to (isset($foo) && $foo) ?
$foo : 'default' if $foo exists.
Also PHP has added ?? as null-coalescing operator that works with
undefined variables/attributes/keys, my proposal is an improvement over
this one.
I don't want to endorse usage of undefined variables, can be used in a
large set of situations, like object attributes, array keys, etc...
Anyway thanks for your feedback.
Lito.
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
mailto:info@eordes.com> wrote:Related with Request #75833 https://bugs.php.net/bug.php?id=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.
No $foo ?: 'default' , it's only equivalent to (isset($foo) && $foo) ?
$foo : 'default' if $foo exists.Also PHP has added ?? as null-coalescing operator that works with
undefined variables/attributes/keys, my proposal is an improvement over
this one.I don't want to endorse usage of undefined variables, can be used in a
large set of situations, like object attributes, array keys, etc...
What is the use case for the ??: operator?
Null-coalesce is very common, because undefined/null are typically used to
signal default values. Using any falsy value to indicate a default value
seems a lot more unusual and precarious to me, especially if you consider
PHP's specific semantics around falsiness (with the string "0" being falsy).
Nikita
This:
echo (isset($foo) && $foo) ? $foo : 'default';
Is equivalent to:
echo $foo ?: 'default';
Please don't endorse usage of undefined variables.
Hi,
No $foo ?: 'default' , it's only equivalent to (isset($foo) && $foo) ? $foo
: 'default' if $foo exists.Also PHP has added ?? as null-coalescing operator that works with undefined
variables/attributes/keys, my proposal is an improvement over this one.I don't want to endorse usage of undefined variables, can be used in a large
set of situations, like object attributes, array keys, etc...Anyway thanks for your feedback.
Lito.
There is a shorter version:
empty($foo) ? 'default' : $foo;
And I think that's quite convenient for the few use cases it has
(refer to Nikita's reply).
Cheers,
Andrey.
Hi,
No $foo ?: 'default' , it's only equivalent to (isset($foo) && $foo) ? $foo
: 'default' if $foo exists.Also PHP has added ?? as null-coalescing operator that works with undefined
variables/attributes/keys, my proposal is an improvement over this one.I don't want to endorse usage of undefined variables, can be used in a large
set of situations, like object attributes, array keys, etc...Anyway thanks for your feedback.
Lito.There is a shorter version:
empty($foo) ? 'default' : $foo;
And I think that's quite convenient for the few use cases it has
(refer to Nikita's reply).Cheers,
Andrey.
Yes, I think that:
$foo = $foo ??: 'default';
Is more clear and with less code than:
$foo = empty($foo) ? 'default' : $foo;
As ?? does.
Regards,
Lito.
This is a RFC karma request for my wiki account.
I want to create a RFC with my proposal: Improve null-coalescing
operator (??) adding empty check (??:)
First list message is: http://news.php.net/php.internals/101606
The main idea is simplify "empty" check on non existing keys or object
attributes. Same as "?:" but also checking undefined.
Current check:
$value = empty($user->thisOptionalAttributeCanBeEmptyOrNotExists) ?
'without value' : $user->thisOptionalAttributeCanBeEmptyOrNotExists;
New feature:
$value = $user->thisOptionalAttributeCanBeEmptyOrNotExists ??: 'without
value';
I think that could be very usefull on inline "exists" + "not empty"
checks with a more clear code.
It's possible?
Thanks,
Lito.
Hi,
No $foo ?: 'default' , it's only equivalent to (isset($foo) && $foo)
? $foo
: 'default' if $foo exists.Also PHP has added ?? as null-coalescing operator that works with
undefined
variables/attributes/keys, my proposal is an improvement over this one.I don't want to endorse usage of undefined variables, can be used in
a large
set of situations, like object attributes, array keys, etc...Anyway thanks for your feedback.
Lito.There is a shorter version:
empty($foo) ? 'default' : $foo;
And I think that's quite convenient for the few use cases it has
(refer to Nikita's reply).Cheers,
Andrey.Yes, I think that:
$foo = $foo ??: 'default';
Is more clear and with less code than:
$foo = empty($foo) ? 'default' : $foo;
As ?? does.
Regards,
Lito.