<?php
class Foo
{
    public function getPrivateMethod()
    {
        return [$this, 'privateMethod'];
    }
    private function privateMethod()
    {
        echo __METHOD__, "\n";
    }
}
$foo = new Foo();
$privateMethod = $foo->getPrivateMethod();
$privateMethod();
// Fatal error: Call to private method Foo::privateMethod() from global scope
// Причина фатальной ошибки состоит в том, что callable-выражение вызвали за пределами класса Foo,
// а видимость метода класса проверяется в контексте вызова, а не определения
class Foo1
{
    public function getPrivateMethod()
    {
        // Callable-выражение унаследует область видимости переменных,
        // в которой выражение получат
        return $this->privateMethod(...); // Значение возврата идентично
                                          // значению вызова Closure::fromCallable([$this, 'privateMethod']);
    }
    private function privateMethod()
    {
        echo __METHOD__, "\n";
    }
}
$foo1 = new Foo1();
$privateMethod = $foo1->getPrivateMethod();
$privateMethod(); // Foo1::privateMethod
?>