<?php
class Foo {
public function obterMetodoPrivado() {
return [$this, 'metodoPrivado'];
}
private function metodoPrivado() {
echo __METHOD__, "\n";
}
}
$foo = new Foo;
$metodoPrivado = $foo->obterMetodoPrivado();
$metodoPrivado();
// Fatal error: Call to private method Foo::metodoPrivado() from global scope
// Isso acontece porque a chamada é realizada fora de Foo e a visibilidade será verificada a partir desse ponto.
class Foo1 {
public function obterMetodoPrivado() {
// Usa o escopo onde o callable é adquirido.
return $this->metodoPrivado(...); // Idêntico a Closure::fromCallable([$this, 'metodoPrivado']);
}
private function metodoPrivado() {
echo __METHOD__, "\n";
}
}
$foo1 = new Foo1;
$metodoPrivado = $foo1->obterMetodoPrivado();
$metodoPrivado(); // Foo1::metodoPrivado
?>