On Sun, Nov 22, 2015 at 8:01 AM, Xinchen Hui <larue...@php.net> wrote:

> Hey:
>
> On Sun, Nov 22, 2015 at 6:47 AM, Anthony Ferrara <ircmax...@gmail.com>
> wrote:
>
> > All,
> >
> > It appears that in our efforts to optimize PHP 7 we've introduced an
> > inconsistency into array handling. This is demonstrated by this
> > script: https://3v4l.org/hVcAB
> >
> > $a = 1;
> > unset($a);
> > var_dump(count($GLOBALS), $GLOBALS);
> >
> > The result is that the count doesn't match the contents of the array.
> >
> > It also affects objects casted to arrays in certain cases.
> >
> > Here, the array has 1 element, but should have 0. Trying to access the
> > "1" element "a" results in a notice.
> >
> > This means that the count is incorrect. This is due to the fact that
> > the "a" element follows an IS_INDIRECT type pointing to the other
> > symbol table.
> >
> > A potential solution would be to make count() an O(n) operation in the
> > case that the hashtable is a symbol table or if it has INDIRECT
> > elements. Meaning that we'd compute the real count at runtime.
> >
> > This obviously has performance ramifications, but we shouldn't
> > sacrifice consistency and behavior for performance IMHO. Especially
> > when it comes to core data structures.
> >
> > I think this is significant enough to be a blocker to gold and that we
> > should fix it prior to release.
> >
>
> I don't think so, it's only affects symbol tables. means, it won't affects
> normal arrays. like:
>
> <?php
>
> $array = range(1, 10);
> unset($array[2]);
> var_dump(count($array));
>
>
> $array = array("foo" => 1, "bar" => 2, "dummy" => 3);
> unset($array["bar"]);
> var_dump(count($array));
> ?>
>
> anyway, I've fixed this here:
>
> https://github.com/php/php-src/commit/eada2aa91add2de69bc5783b840a21243a7b0678
>
> and, we maybe move this new functions  into zend_hash(as a ZEND_API),
> anyway I am not sure whether it's okey for PHP-7.0.
>

The patch looks fine. We already use something similar for serialise().

Thanks. Dmitry.


>
> will discuss with welting and Dmitry on Monday.
>
> thanks
>
> >
> > Thoughts?
>
>
> > Anthony
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
>
>
>
> --
> Xinchen Hui
> @Laruence
> http://www.laruence.com/
>

Reply via email to