On 4/8/25 8:46 PM, Claude Pache wrote:
> Hi,
>
> I think that this argument is not convincing, and even counterproductive:
>
> * NULL is a rare legitimate value, so the potential for clashing is low
>
> First, it says that it is a “rare” legitimate value, which one can disagree with. (I do
> disagree.)
>
I think it's a matter of phrasing, but I agree that it can be more nuanced.
> Second, the way it is formulated, it implies that, when null
is used in array,
> there will be “clashing”, which is not necessarily the case. (I consider that there is almost
> never a clash, because it is rarely useful to make the difference between an explicit
> null
and a missing value, and, when it is useful, you have almost surely already
> checked for an empty array upfront.)
>
> I suggest to replace that argument with the two following ones, that doesn’t treat arrays
> with NULL as second class citizens:
>
> * Semantically, NULL represents a missing value. Returning NULL from an empty array is not
> semantically incorrect, but it means that the function doesn’t differentiate between a implicit
> missing value (empty array) and an explicit missing value (array with NULL as its first/last
> element).
>
> * In the relatively rare cases you do want to make the difference between an empty array and an
> array that starts/ends with NULL, you can (and should) just check for empty array upfront.
>
That's indeed a bit better worded and more nuanced. I might adapt the RFC text a bit; although
in the end it kinda means the same thing anyway.
> -------
>
> One more thing. On https://www.php.net/, I read: “Fast,
> flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the
> world.” (emphasis added). If we were to design some new perfect language, we might consider making
> array_first()
(or equivalent) choke on empty arrays. But given the current state of the
> affairs, the pragmatic thing to do is to pave the cowpath.
I agree. I value consistency; we have too much inconsistency already in PHP anyway, let's not
add more (unless we would have a very very good reason to do so; but that's not in this case
IMO).