Re: [RFC] Four Pragmatic Directions for PHP: Simplicity, Arrays, Performance, Concurrency

From: Date: Sat, 28 Mar 2026 18:31:06 +0000
Subject: Re: [RFC] Four Pragmatic Directions for PHP: Simplicity, Arrays, Performance, Concurrency
References: 1 2 3 4 5 6 7 8  Groups: php.internals 
Request: Send a blank email to internals+get-130476@lists.php.net to get a copy of this message
On 27/03/2026 15:19, Alex Rock wrote:
In that case, maybe reuse something similar to the null-safe operator ? Something like $foo['bar']?
I think even if you could make it work in the parser, it would be hard to make that read well with the ternary operator: $foo['a'] ? ['b'] ? ['c'] : ['d'];
    return $foo['one']?['two'];
Looking at that, it's not obvious to me whether it's 'one' or 'two' which is optional. return $foo['one']  ?['two']; return $foo['one']?  ['two'];
And here it gets interesting:
    return $foo['one']['two']?['three'];
    // is roughly equivalent to:
    if (!isset($foo['one']) {
    trigger_error('Undefined key "one" in ...', ...);
    }
    return $foo['one']['two']['three'] ?? null;
You can have the same ability with a ? inside the brackets, and without the ambiguity: // all three keys required to exist (as of PHP 9): return $foo['one']['two']['three']; // 'one' and 'two' required, 'three' optional: return $foo['one']['two'][?'three']; // both 'two' and 'three' optional: return $foo['one'][?'two'][?'three']; // optional all the way: return $foo[?'one'][?'two'][?'three']; This would maybe have similar short-cut semantics to ?-> $foo = []; return $foo[?'one']['two']; // OK: the ? neutralises access to the missing section of the array, short-cutting to NULL // Similar to $foo?->bar->baz when $foo is NULL $foo = ['one' => []]; return $foo[?'one']['two']; // Error: the ? had no effect, so we're trying to access non-existent key 'two' in the empty array $foo['one'] // Similar to $foo?->bar->baz when $foo->bar exists But an RFC could pin down those details. -- Rowan Tommins [IMSoP]

« previous php.internals (#130476) next »