[Discussion] `ifset()` language construct

  107135
September 16, 2019 05:36 webdevxp.com@gmail.com (Kosit Supanyo)
Hi Internals

I don't have permission to create RFCs but I would like to propose/discuss
new language construct called `ifset()` which is syntactic sugar to null
coalescing operator with rhs value `null`. The goal of this proposal is
similar to Andrea Fauld's proposal (
https://wiki.php.net/rfc/unary_null_coalescing_operator), and the chosen
keyword is similar to historical discussion `ifsetor()`. Here's an example.

$result = $a ?? null;
vs
$result = ifset($a);

$result = $a ?? $b ?? $c ?? $d ?? $e ?? null;
vs
$result = ifset($a, $b, $c, $d, $e);

As you can see `ifset()` does not make code much shorter but the main goal
of this syntax is expressiveness not shortness.

someFunc(
    $arg1,
    $arg2,
    $longVariableName1 ?? $longVariableName2 ?? $longVariableName3 ?? null,
    $arg4,
);

vs

someFunc(
    $arg1,
    $arg2,
    ifset(
        $longVariableName1,
        $longVariableName2,
        $longVariableName3,
    ),
    $arg4,
);

I know that this proposal is highly unlikely to be accepted because it just
does same as `??` but in different way and it introduces new keyword (we
don't have any new keyword since `yield` in 5.5) and, furthermore, I did
search through github and found some projects using `ifset` as function
name (https://github.com/search?l=PHP&q=ifset&type=Code).

Here's the patch: https://github.com/webdevxp/php-src

Cheers