com php-src: Allow ReflectionClass::isIterable() to return true for Traversables: ext/reflection/php_reflection.c
| From: | Sara Golemon | Date: | Wed, 31 May 2017 21:23:57 +0000 |
| Subject: | com php-src: Allow ReflectionClass::isIterable() to return true for Traversables: ext/reflection/php_reflection.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-97971@lists.php.net to get a copy of this message | ||
Commit: d1cfd87fbe9e34bf909abedb61cfa4b2d7022b4d
Author: Sara Golemon <pollita@php.net> Wed, 31 May 2017 14:18:19 -0700
Parents: c1500f8519aded29c3632de4240fbc0a4e485a81
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d1cfd87fbe9e34bf909abedb61cfa4b2d7022b4d
Log:
Allow ReflectionClass::isIterable() to return true for Traversables
Current behavior is essentially "Is an INTERNAL iterable class".
This change allows isIterable() to return true for userspace classes as well.
Changed paths:
M ext/reflection/php_reflection.c
Diff:
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 84f4d66..19975d2 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -5131,7 +5131,12 @@ ZEND_METHOD(reflection_class, isIterable)
METHOD_NOTSTATIC(reflection_class_ptr);
GET_REFLECTION_OBJECT_PTR(ce);
- RETURN_BOOL(ce->get_iterator != NULL);
+ if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS |
+ ZEND_ACC_TRAIT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
+ RETURN_FALSE;
+ }
+
+ RETURN_BOOL(ce->get_iterator || instanceof_function(ce, zend_ce_traversable));
}
/* }}} */