Skip to content

ReflectionMethod constructor should not find private parent method #9470

Closed
@iluuu1994

Description

@iluuu1994

Description

Original issue: #9409

Description

Related to #9405 and https://bugs.php.net/bug.php?id=64592

It might not be important, but I think this should be fixed at some point, so I've created a new issue. I can also provide PR if you want.

  1. Private methods are accessible through child using ReflectionMethod:
    The following code: https://3v4l.org/Bso8B
<?php
class A
{
    private $privateProperty = 1;
    private function privateMethod() {}
}
class B extends A {}

try {
    echo (string) new ReflectionMethod('B', 'privateMethod');
} catch(Throwable $e){
    echo (string) $e;
}
try {
    echo (string) new ReflectionProperty('B', 'privateProperty');
} catch(Throwable $e){
    echo (string) $e;
}

Resulted in this output:

Method [ <user, inherits A> private method privateMethod ] {
  @@ /in/Bso8B 6 - 6
}
ReflectionException: Property B::$privateProperty does not exist in /in/Bso8B:16
Stack trace:
#0 /in/Bso8B(16): ReflectionProperty->__construct('B', 'privateProperty')
#1 {main}

But I expected this output instead:

ReflectionException: Method B::privateMethod() does not exist in /in/Bso8B:11
Stack trace:
#0 /in/Bso8B(11): ReflectionMethod->__construct('B', 'privateMethod2')
#1 {main}ReflectionException: Property B::$privateProperty does not exist in /in/Bso8B:16
Stack trace:
#0 /in/Bso8B(16): ReflectionProperty->__construct('B', 'privateProperty')
#1 {main}

PHP Version

8.0 - 8.2

Operating System

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions