mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
- Fixed bug #61326 (ArrayObject comparison).
This commit is contained in:
parent
b39ffa3f34
commit
7bbf5fe650
11
NEWS
11
NEWS
@ -47,6 +47,9 @@ PHP NEWS
|
||||
. Fixed bug #61267 (pdo_pgsql's PDO::exec() returns the number of SELECTed
|
||||
rows on postgresql >= 9). (ben dot pineau at gmail dot com)
|
||||
|
||||
- PDO_Sqlite extension:
|
||||
. Add createCollation support. (Damien)
|
||||
|
||||
- Phar:
|
||||
. Fixed bug #61184 (Phar::webPhar() generates headers with trailing NUL
|
||||
bytes). (Nikic)
|
||||
@ -60,13 +63,13 @@ PHP NEWS
|
||||
chunksize length line is > 10 bytes). (Ilia)
|
||||
. Fixed bug #60887 (SoapClient ignores user_agent option and sends no
|
||||
User-Agent header). (carloschilazo at gmail dot com)
|
||||
|
||||
|
||||
- SPL
|
||||
. Fixed bug #61326 (ArrayObject comparison). (Gustavo)
|
||||
|
||||
- SQLite3 extension:
|
||||
. Add createCollation() method. (Brad Dewar)
|
||||
|
||||
- PDO_Sqlite extension:
|
||||
. Add createCollation support. (Damien)
|
||||
|
||||
- Reflection:
|
||||
. Fixed bug #60968 (Late static binding doesn't work with
|
||||
ReflectionMethod::invokeArgs()). (Laruence)
|
||||
|
@ -836,6 +836,30 @@ static void spl_array_unset_property(zval *object, zval *member TSRMLS_DC) /* {{
|
||||
std_object_handlers.unset_property(object, member TSRMLS_CC);
|
||||
} /* }}} */
|
||||
|
||||
static int spl_array_compare_objects(zval *o1, zval *o2 TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
HashTable *ht1,
|
||||
*ht2;
|
||||
spl_array_object *intern1,
|
||||
*intern2;
|
||||
int result = 0;
|
||||
zval temp_zv;
|
||||
|
||||
intern1 = (spl_array_object*)zend_object_store_get_object(o1 TSRMLS_CC);
|
||||
intern2 = (spl_array_object*)zend_object_store_get_object(o2 TSRMLS_CC);
|
||||
ht1 = spl_array_get_hash_table(intern1, 0 TSRMLS_CC);
|
||||
ht2 = spl_array_get_hash_table(intern2, 0 TSRMLS_CC);
|
||||
|
||||
zend_compare_symbol_tables(&temp_zv, ht1, ht2 TSRMLS_CC);
|
||||
result = (int)Z_LVAL(temp_zv);
|
||||
/* if we just compared std.properties, don't do it again */
|
||||
if (result == 0 &&
|
||||
!(ht1 == intern1->std.properties && ht2 == intern2->std.properties)) {
|
||||
result = std_object_handlers.compare_objects(o1, o2 TSRMLS_CC);
|
||||
}
|
||||
return result;
|
||||
} /* }}} */
|
||||
|
||||
static int spl_array_skip_protected(spl_array_object *intern, HashTable *aht TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
char *string_key;
|
||||
@ -2003,6 +2027,8 @@ PHP_MINIT_FUNCTION(spl_array)
|
||||
spl_handler_ArrayObject.has_property = spl_array_has_property;
|
||||
spl_handler_ArrayObject.unset_property = spl_array_unset_property;
|
||||
|
||||
spl_handler_ArrayObject.compare_objects = spl_array_compare_objects;
|
||||
|
||||
REGISTER_SPL_STD_CLASS_EX(ArrayIterator, spl_array_object_new, spl_funcs_ArrayIterator);
|
||||
REGISTER_SPL_IMPLEMENTS(ArrayIterator, Iterator);
|
||||
REGISTER_SPL_IMPLEMENTS(ArrayIterator, ArrayAccess);
|
||||
|
17
ext/spl/tests/bug61326.phpt
Normal file
17
ext/spl/tests/bug61326.phpt
Normal file
@ -0,0 +1,17 @@
|
||||
--TEST--
|
||||
Bug #61326: ArrayObject comparison
|
||||
--FILE--
|
||||
<?php
|
||||
$aobj1 = new ArrayObject(array(0));
|
||||
$aobj2 = new ArrayObject(array(1));
|
||||
var_dump($aobj1 == $aobj2);
|
||||
|
||||
$aobj3 = new ArrayObject(array(0));
|
||||
var_dump($aobj1 == $aobj3);
|
||||
|
||||
$aobj3->foo = 'bar';
|
||||
var_dump($aobj1 == $aobj3);
|
||||
--EXPECT--
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(false)
|
Loading…
Reference in New Issue
Block a user