On Tue, Oct 17, 2023, at 12:19, Saki Takamachi wrote:
>> What about a signature like:
>>
>> ```php
>> array_first(array $array, mixed $value_if_missing = null);
>> ```
>>
>> That would let you specify your own sentinel (or default) where appropriate,
>> without losing the convenience of this function.
>
> This is a problem that should be addressed in your application.
>
> ```
> array_first($arr) ?? $initial
> ```
>
> I personally think we should make the effort to write it this way and
> not have to support initial values at the language level.
The problem Levi mentioned is that there's ambiguity in this construction: if
the valid data domain for elements of `$arr` includes `null`, then you can't
tell whether the null comes from the array being empty, or from its first value
being null. In other words, there exists application code where using `??` in
this way is unsuitable.
I can think of three approaches for dealing with this, resulting in application
code like:
```
$value = array_first($arr, $default);
$value = count($arr) > 0 ? array_first($arr) : $default;
try {
$value = array_first($arr);
} catch (OutOfBoundsException $e) {
$value = $default;
}
```
I think the first of those - what I initially suggested - is the cleanest.
mjec
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php