Re: [RFC] Four Pragmatic Directions for PHP: Simplicity, Arrays, Performance, Concurrency
| From: | Rowan Tommins [IMSoP] | 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'];
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'];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]