Hi,

On Wed, Nov 2, 2011 at 17:27, Stas Malyshev <smalys...@sugarcrm.com> wrote:
> Hi!
>
>> What about array_diff(array("Array"), array(array()))? To me the sole
>> act of having an array in it is an almost sure indication that the code
>> is wrong somewhere... IMO it deserves a notice.
>
> That one would have the arrays different.

Well, they are not different elements w.r.t array_diff, so it does
return array() since (string)"Array" === (string)array().

My point is: there is an implicit usage of string representations  in
those functions due to the cast. And it can yield various unexpected
results.

Another example is:

array_intersect(array(array(1)), array(array(2))) === array(array(1)).
Even though array(1) != array(2).

To me it falls exactly within what the patch tries to achieve: report
potential unintentional misuses of arrays.

> Having multi-dimensonal arrays is
> not an error, comparing arrays of different structure is not an error
> either. Consider expression: "a" == array(). Is it an error? No, it's just a
> false expression.

Right, but that's not the question here. We are not normally comparing
the elements, arrays or not, we are comparing their string
representations, which in the case of arrays makes almost no sense to
compare.

> In the same way all comparisons where you compare string
> to array should just say it's not equal, since we know they're not equal.

I surely don't expect it to issue a Notice if I do $var == "asd" and
$var turns out to be an array. But then again, it's not the question
here.

>
> --
> Stanislav Malyshev, Software Architect
> SugarCRM: http://www.sugarcrm.com/
> (408)454-6900 ext. 227
>



-- 
Etienne Kneuss
http://www.colder.ch

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to