On Tue, 14 Nov 2023 at 18:49, Robert Landers <landers.rob...@gmail.com> wrote: > > On Tue, Nov 14, 2023 at 1:39 PM Andreas Hennings <andr...@dqxtech.net> wrote: > > > > Hello Robert, > > > > On Tue, 14 Nov 2023 at 11:09, Robert Landers <landers.rob...@gmail.com> > > wrote: > > > > > > Andreas, > > > > > > Just out of curiosity, what is the use case for this? I can't really > > > think of a practical case where strict checking is needed for these > > > functions. Usually, you have a really good idea of what is in the > > > arrays when writing the code and can handle any edge cases (like > > > nulls, empty strings, etc) long before you reach for these functions. > > > > I could ask the reverse question: When do you ever need a non-strict > > comparison? > > I think in most modern php development, you would prefer the strict > > comparison version simply because it is more simple and predictable. > > > > But for real examples. > > One thing I remember is array_diff($arr, [null]) to remove NULL > > values, without removing empty strings. > > Perhaps we could say this is a special case that could be solved in > > other ways, because we only remove one value. > > > > Another thing is when writing reusable general-purpose functions that > > should work for all arrays. > > The caller might know the types of the array values, but the developer > > of the reusable function does not. > > > > Another problem is if your arrays contain anything that is not > > stringable. like objects and arrays. > > > > Maybe I will remember other examples that are more practical. > > > > Btw, as a general note on strict vs non-strict: > > In some cases you want a "half strict" comparison, where '5' equals 5, > > but true does NOT equal '1'. > > But for now I am happy to focus on pure strict comparison. > > > > Andreas > > > > > > > > > > Robert Landers > > > Software Engineer > > > Utrecht NL > > > > > > -- > > > PHP Internals - PHP Runtime Development Mailing List > > > To unsubscribe, visit: https://www.php.net/unsub.php > > > > > Hello Andreas, > > > Another problem is if your arrays contain anything that is not > > stringable. like objects and arrays. > > array_udiff() comes to mind here, is there a reason that doesn't work? > It would allow you to 'half-equals' things as well, if you want.
Yes this would work, with a callback that does strict diff. But this is going to be much slower than a native array_diff() for large arrays. Also, array_udiff() is weird in that it it expects a sorting comparator function rather than a boolean comparator function. > > > I could ask the reverse question: When do you ever need a non-strict > > comparison? > > You actually answer your own question :) > > > where '5' equals 5, > > One of the most beautiful things about PHP is that null == 0 == false, > or '5' == 5 == 5.0, or 1 == true == 'hello world', which is so > incredibly handy in web-dev that to ignore it is inviting bugs. One problem of == in php and in javascript is that it is not transitive. And I would argue in most cases it does a lot more casting than we need, in a way that can be perceived as surprising. > Headers may or may not be set, form values may or may not be set, JSON > documents may or may not be missing keys/values, etc. How everything > is coerced is extremely well documented and very obvious after working > with PHP for a while. I imagine a user study would come to a different conclusion than "very obvious". But ok. Anyway, time for an RFC. (I was going to write more, but I should protect this list from my preaching and arguing) Andreas > > I'm reminded of this principle in PHP, quite often: > > > Be conservative in what you do, be liberal in what you accept from others. > > Robert Landers > Software Engineer > Utrecht NL -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php