On Tue, 8 Apr 2025 at 18:38, Levi Morrison <levi.morri...@datadoghq.com> wrote:
>
> On Sat, Apr 5, 2025 at 9:51 AM Niels Dossche <dossche.ni...@gmail.com> wrote:
> >
> > Hi internals
> >
> > I'm opening the discussion for the RFC "array_first() and array_last()".
> > https://wiki.php.net/rfc/array_first_last
> >
> > Kind regards
> > Niels
>
> I dislike all the functions where `null` is a valid value, which can
> also be confused with an error in the operation.
>
> However, this is kind of in the grey area for me, because we do have
> plenty of tools to avoid the error condition. Of course there's the
> simple if:
>
>     if (!empty($array) {
>         $first = array_first($array);
>     }
>
> And if we have a default value that could be used:
>
>     $first = !empty($array) ? array_first($array) : $default;
>
> I would prefer a better design tool than returning null, but being
> honest, neither of these are too bad. As long as our documentation for
> these functions are helpful but concise about showing how to work
> around these edges, then I may be convinced to vote yes despite the
> design.

(I used the wrong reply button earlier)

The problem with the above solutions is that you need to repeat the
array expression.
For a simple variable that is ok, but for a call, not so much.
So it is not good for nested expressions, you need to introduce a
local variable.
(which some believe you should do anyway, but...)

One way to get a custom unique "empty" value would be this:
$zilch = new \stdClass();
$first = array_first(some_lengthy_expression() ?: [$zilch]);
if ($first === $zilch) { ... }

We will know for sure that $zilch cannot be a pre-existing array value.

In a lot of cases we already know that the array does not contain
NULL, then it works fine as a default.

-- Andreas

Reply via email to