Re: array_key_exists BC break
| From: | Hannes Magnusson | Date: | Thu, 06 Nov 2008 21:24:58 +0000 |
| Subject: | Re: array_key_exists BC break | ||
| References: | 1 2 3 4 5 6 7 8 9 10 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-41741@lists.php.net to get a copy of this message | ||
On Thu, Nov 6, 2008 at 22:06, Johannes Schlüter <johannes@php.net> wrote:
> On Thu, 2008-11-06 at 10:10 -0800, Stanislav Malyshev wrote:
>> Hi!
>>
>> > So as suggested and wished, here is a patch that add a modifier '%' to
>> > 'a' in parameter parsing API, where it allows object that implements
>> > ArrayAccess to be accept. Although it doesn't invoke any their methods,
>> > i.e. just how it works nowdays.
>>
>> I think if you use HASH_OF then any object having get_properties should
>> be fine... Is there any reason to restrict it to ArrayAccess?
>
> This can be wrong/strange with classes implementing ArrayAccess (not
> ArrayObject) or Iterator.
>
> An example where one might expect an Iterator, reset() and next() use
> HASH_OF in 5.2:
>
> <?php
> class I implements Iterator {
> public $foo = "some real property";
>
> public function rewind() {
> echo __METHOD__, "\n";
> }
> public function current() {
> echo __METHOD__, "\n";
> return "from iterator";
> }
> public function valid() {
> static $continue = true;
>
> echo __METHOD__, "\n";
> if ($continue) {
> $continue = false;
> return true;
> } else {
> return false;
> }
> }
> public function next() {} public function key() {}
> }
>
> $i = new I;
>
> reset($i);
> echo current($i);
> ?>
> some real property
Whaaatheef...
I was going to reply back with the actual correct output when I
started wondering how exactly you got these results..
This is a total wtf and just cannot be the intended designed behaviour.
Switching it however "out-of-the-blue" and introducing the weirdest
and really hard-to-debug behaviour is pretty bad.
How many applications do rely on such behaviour though? The manual
clearly says these functions take arrays, not objects, so I can't
believe many do.
At most some legacy PHP4 applications which will never be upgraded to
PHP5 boxes would be my guess.
-Hannes