Call private/protected method without ReflectionMethod in PHP
For whatever reason, you may need to call private/protected method from an object. For example, we have a Foo
class with bar
method with private
modifier like below:
class Foo { private function bar() { echo 'hit'; } }
We need to call bar()
method from an instance of Foo class. If you are familiar with ReflectionMethod
, you may do this:
$r = new ReflectionMethod($foo = new Foo(), 'bar'); $r->setAccessible(true); $r->invoke($foo);
There is another way. It is by using invoked of Closure::bindTo()
like below:
(function ($foo) { $foo->bar(); })->bindTo($foo = new Foo(), Foo::class)($foo);
That’s it!
leave a comment