Is there any chance of revisiting this issue? I mean, to change the
default back to SORT_STRING. We now have a couple more reports
regarding this:

http://bugs.php.net/47370#c147594
http://bugs.php.net/48115

Regards,
Moriyoshi

On Fri, Feb 27, 2009 at 8:30 AM, Ilia Alshanetsky <i...@prohost.org> wrote:
> Moriyoshi,
>
> First of thank you for taking the time to provide examples regarding the
> issues you are demonstrating. I've looked at a number of different
> applications and have not found a functionality breakage due to this change.
> While your example does show a change, I am not convinced (sorry) that it is
> an adverse one, type-different comparison is always tricky and not entirely
> reliable and I think demonstrates more of a corner-case situation.
>
> I think our best option at this time is to release 5.2.9 as quickly as
> possible as it introduces a number of crucial fixes and if your comments are
> validated via user feedback we can adjust the values with 5.2.10 that can be
> repackaged fairly rapidly. IMHO the current functionality is desired and is
> acceptable.
>
> Ilia Alshanetsky
>
>
>
>
> On 26-Feb-09, at 1:58 PM, Moriyoshi Koizumi wrote:
>
>> Robin Burchell wrote:
>>>
>>> On Thu, Feb 26, 2009 at 5:21 PM, Moriyoshi Koizumi <m...@mozo.jp> wrote:
>>>>
>>>> So, in what point do you guys think of this change as valid?
>>>>
>>>> Moriyoshi
>>>
>>> Is there any known examples of code broken by this, or is it a more
>>> academic than practical problem?
>>>
>>> <snip>
>>
>> That's indeed a practical problem.
>>
>> 1. array_unique() has never been supposed to handle values other than
>> strings. That's how bug #10658 is handled.
>>
>> http://bugs.php.net/10658
>>
>> See also:
>>
>> http://cvs.php.net/viewvc.cgi/phpdoc/en/reference/array/functions/array-unique.xml?revision=1.16&view=markup
>>
>> 2. the results are inconsistent between SORT_STRING and SORT_REGULAR
>> when the items are a mixture of different types.
>>
>> <?php
>> $objs = array(
>>   "0x10",
>>   16,
>>   true,
>>   "true",
>> );
>>
>> var_dump(array_unique($objs, SORT_REGULAR));
>> var_dump(array_unique($objs, SORT_STRING));
>>
>> $objs = array(
>>   "0x10",
>>   true,
>>   16,
>>   "true",
>> );
>>
>> var_dump(array_unique($objs, SORT_REGULAR));
>> var_dump(array_unique($objs, SORT_STRING));
>> ?>
>>
>> I could hardly imagine what would show up. Do you?
>>
>> array(1) {
>>  [0]=>
>>  string(4) "0x10"
>> }
>> array(4) {
>>  [0]=>
>>  string(4) "0x10"
>>  [1]=>
>>  int(16)
>>  [2]=>
>>  bool(true)
>>  [3]=>
>>  string(4) "true"
>> }
>> array(2) {
>>  [0]=>
>>  string(4) "0x10"
>>  [3]=>
>>  string(4) "true"
>> }
>> array(4) {
>>  [0]=>
>>  string(4) "0x10"
>>  [1]=>
>>  bool(true)
>>  [2]=>
>>  int(16)
>>  [3]=>
>>  string(4) "true"
>> }
>>
>>
>> 3. the result can be unreasonable even with SORT_REGULAR
>>
>> As the equality of the object is only determined by member-wise
>> comparison, there must be cases where the behavior is not acceptable:
>>
>> <?php
>> class Foo {
>>   public $a;
>>   function __construct($a) {
>>       $this->a = $a;
>>   }
>> };
>>
>>
>> $objs = array(
>>   new Foo(1), new Foo("2e0"), new Foo(2), new Foo(3)
>> );
>>
>> var_dump(array_unique($objs, SORT_REGULAR));
>> ?>
>>
>> This yields:
>>
>> array(3) {
>>  [0]=>
>>  object(Foo)#1 (1) {
>>   ["a"]=>
>>   int(1)
>>  }
>>  [1]=>
>>  object(Foo)#2 (1) {
>>   ["a"]=>
>>   string(3) "2e0"
>>  }
>>  [3]=>
>>  object(Foo)#4 (1) {
>>   ["a"]=>
>>   int(3)
>>  }
>> }
>>
>> while the second item is semantically not expected to be equal to the
>> third.
>>
>>
>> Moriyoshi
>>
>> --
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>
>

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

Reply via email to