mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4: Fix GH-20217: ReflectionClass::isIterable() should return false for classes with property hooks (#20241)
This commit is contained in:
3
NEWS
3
NEWS
@@ -2,6 +2,9 @@ PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? ????, PHP 8.5.0RC4
|
||||
|
||||
- Reflection:
|
||||
. Fixed bug GH-20217 (ReflectionClass::isIterable() incorrectly returns true
|
||||
for classes with property hooks). (alexandre-daubois)
|
||||
|
||||
23 Oct 2025, PHP 8.5.0RC3
|
||||
|
||||
|
||||
@@ -5589,7 +5589,8 @@ ZEND_METHOD(ReflectionClass, isIterable)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
RETURN_BOOL(ce->get_iterator || instanceof_function(ce, zend_ce_traversable));
|
||||
RETURN_BOOL((ce->get_iterator && ce->get_iterator != zend_hooked_object_get_iterator)
|
||||
|| instanceof_function(ce, zend_ce_traversable));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
38
ext/reflection/tests/ReflectionClass_isIterable_gh20217.phpt
Normal file
38
ext/reflection/tests/ReflectionClass_isIterable_gh20217.phpt
Normal file
@@ -0,0 +1,38 @@
|
||||
--TEST--
|
||||
GH-20217 (ReflectionClass::isIterable() should return false for classes with property hooks)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class ClassWithPropertyHooks
|
||||
{
|
||||
public string $name {
|
||||
get => 'virtual';
|
||||
}
|
||||
}
|
||||
|
||||
class IterableClassWithPropertyHooks implements IteratorAggregate
|
||||
{
|
||||
public string $name {
|
||||
get => 'virtual';
|
||||
}
|
||||
|
||||
public function getIterator(): Traversable
|
||||
{
|
||||
return new ArrayIterator([]);
|
||||
}
|
||||
}
|
||||
|
||||
$classes = [
|
||||
'ClassWithPropertyHooks' => false,
|
||||
'IterableClassWithPropertyHooks' => true,
|
||||
];
|
||||
|
||||
foreach ($classes as $className => $expected) {
|
||||
$status = (new ReflectionClass($className)->isIterable() === $expected) ? 'PASS' : 'FAIL';
|
||||
echo "$className: $status\n";
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
ClassWithPropertyHooks: PASS
|
||||
IterableClassWithPropertyHooks: PASS
|
||||
Reference in New Issue
Block a user