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).