Hello Robin,
Sunday, August 3, 2008, 10:24:17 PM, you wrote:
> Hi Marcus!
>>> 1. What should happen when the argument is an object?
>>
>> Seems like an error message is missing there. It allows to take an instance
>> of another ArrayObject/Iterator and use the array from that.
>>
>> In case any other Object is passed it is ignored. What do you feel?
> Sounds alright to me, but it's inconsistent with __construct(), which
> in addition to using the storage array from ArrayObject/Iterator
> instances, can use the properties from any other kind of object. Also,
> just to be clear, I should point out that it is not the current
> behaviour. Passing any object to exchangeArray(), even an instance of
> ArrayObject/Iterator, eradicates the container:
> <?php
> $ao1 = new ArrayObject(array('one'));
> $ao2 = new ArrayObject(array('two'));
> $ao1->exchangeArray($ao2);
> var_dump($ao1);
?>>
> Output on PHP 5.3.0-dev (cli) (built: Jul 28 2008 00:21:59):
> object(ArrayObject)#1 (0) {
> }
>>> Here's a suggested patch against 5_3 that implements this (and
>>> includes some tests): http://pastebin.ca/1091668
>>> Note that I'm not an internals or SPL expert, so let me know if I
>>> missed something.
>>
>> Seems about right. Can you attach the patch as a text file (I cannot open
>> the link).
> Attached. I just naively moved some logic from __construct() into a
> separate function and called it from both __construct() and
> exchangeArray().
Well, naively or not, this seems about perfectly correct. Why don't you
simply apply this to HEAD and 5.3?
Best regards,
Marcus
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php