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.

On 17/01/18 19:17, Marco Pivetta wrote:
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" <i...@eordes.com <mailto:i...@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.

-- PHP Internals - PHP Runtime Development Mailing List
    To unsubscribe, visit: http://www.php.net/unsub.php


Reply via email to