Skip to content

Fix GH-22441: reflection misses dynamic prop shadowing private parent#22451

Open
iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/gh-22441-reflection-shadow
Open

Fix GH-22441: reflection misses dynamic prop shadowing private parent#22451
iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/gh-22441-reflection-shadow

Conversation

@iliaal

@iliaal iliaal commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Fixes #22441. ReflectionClass::hasProperty() and getProperty() returned a match from properties_info without first checking the object's dynamic properties. A private property on a parent class sits in that table but is invisible to the child, so a dynamic property shadowing it was reported missing, even though property_exists() and getProperties() report it. The accessibility test now folds into the lookup, so an inaccessible private-parent match falls through to the dynamic-property check.

ReflectionClass::hasProperty() and getProperty() look the name up in the
class's properties_info table and, on a match, return before checking the
object's dynamic properties. A private property declared on a parent class
lives in that table but isn't visible to the child, so a dynamic property of
the same name went unreported. Fold the accessibility check into the lookup so
an inaccessible private-parent match falls through to the existing
dynamic-property check, matching property_exists().

Fixes phpGH-22441
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ReflectionClass issues with dynamic properties shadowing private parent properties

1 participant