diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2020-03-06 11:08:59 +0100 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-03-06 11:12:43 +0100 |
| commit | e9ae581f024e06878b2b1991b7daed6318c811a7 (patch) | |
| tree | 0d112ad0a2c833b4895baa9ac208635a976927e2 /Zend/zend_interfaces.c | |
| parent | 125724cf58ef0a03d12612e6e4a8ae9204454cca (diff) | |
| download | php-git-e9ae581f024e06878b2b1991b7daed6318c811a7.tar.gz | |
Fixed bug #62609: Allow implementing Traversable in abstract class
Master only, as this depends on fixes to calling order of
interface implementation handlers.
Diffstat (limited to 'Zend/zend_interfaces.c')
| -rw-r--r-- | Zend/zend_interfaces.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index cf8b24d76a..acebe0a1fb 100644 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -293,6 +293,11 @@ static int zend_implement_traversable(zend_class_entry *interface, zend_class_en if (class_type->get_iterator || (class_type->parent && class_type->parent->get_iterator)) { return SUCCESS; } + /* Abstract class can implement Traversable only, in which case the extending class must + * implement Iterator or IteratorAggregate. */ + if (class_type->ce_flags & ZEND_ACC_EXPLICIT_ABSTRACT_CLASS) { + return SUCCESS; + } if (class_type->num_interfaces) { ZEND_ASSERT(class_type->ce_flags & ZEND_ACC_RESOLVED_INTERFACES); for (i = 0; i < class_type->num_interfaces; i++) { |
