On Tue, 8 Apr 2025 at 18:38, Levi Morrison <[email protected]> wrote:
>
> On Sat, Apr 5, 2025 at 9:51 AM Niels Dossche <[email protected]> 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