Re: 5dee3c11 break
Hi,
On Tue, May 6, 2014 at 7:25 PM, Dmitry Stogov <dmitry@zend.com> wrote:
> I didn't review you patch careful, but why do you need to call offsetGet()
> when offsetExists() must be enough?
> is it for empty()?
>
Mostly for empty(), yes. It fixes the expected empty() behaviour for
$a['foo'] == 0 when using ArrayObject. This is further explained in this
bug report: https://bugs.php.net/bug.php?id=66834
> Then you probably should implement it a way similar to
> zend_std_has_dimension() in Zend/zend_object_handlers.c.
> call offsetExists() and then offsetGet() if necessary.
>
That's already the case :)
http://lxr.php.net/xref/PHP_TRUNK/Zend/zend_object_handlers.c#719
>
> Thanks. Dmitry.
>
>
> On Tue, May 6, 2014 at 2:31 PM, Tjerk Anne Meesters <datibbaw@php.net>wrote:
>
>> Hi Dmitry,
>>
>> On Tue, May 6, 2014 at 4:11 PM, Dmitry Stogov <dmitry@zend.com> wrote:
>>
>>> Hi Tjerk,
>>>
>>> your commit broke the code that worked fine before (still works in 5.5
>>> but broken in 5.6 and above).
>>> It leads into infinity recursion until stack overflow.
>>>
>>> It must be fixed or reverted.
>>>
>>
>> This has been mentioned by Jakub before and a fix to ZF2 has already been
>> merged:
>>
>> https://github.com/zendframework/zf2/pull/6096
>>
>> The previous code and my patch basically cannot coexist; it used to work
>> in 5.6 before, but only by the "virtue" of an unfortunate implementation.
>>
>> I believe this is not the only 5.6 issue that ZF2 is dealing with, but if
>> you feel that this breaks too many things for a 5.x release I suppose we
>> can revert it in PHP-5.6 and keep it for PHP-6?
>>
>> Let me know.
>>
>>
>>> Thanks. Dmitry.
>>>
>>> <?php
>>> class Parameters extends ArrayObject {
>>> public function __construct(array $values = null) {
>>> if (null === $values) {
>>> $values = array();
>>> }
>>> parent::__construct($values, ArrayObject::ARRAY_AS_PROPS);
>>> }
>>> public function offsetGet($name) {
>>> if (isset($this[$name])) {
>>> return parent::offsetGet($name);
>>> }
>>> return null;
>>> }
>>> }
>>> $x = new Parameters();
>>> var_dump($x['foo']);
>>> $x['foo'] = 'bar';
>>> var_dump($x['foo']);
>>> ?>
>>>
>>
>>
>>
>> --
>> --
>> Tjerk
>>
>
>
--
--
Tjerk
Thread (17 messages)