@vostotskiy

Можно ли вызвать приватный метод внутри анонимной функции?

Здравствуйте. Есть некоторый класс Klass с несколькими методами, который проверяет с помощью анонимной функции некоторые аргументы.
class Klass{
public function check(array $data, callable $function)
    {
        if (!$function($this->testAmount)) {
            throw new \Method exceptionException("Something went wrong");
        }
    }
 private function test($value1, $value2) {
        return $value1== $value2;
    }
}

В другом классе вызываем этот класс и реализуем коллбек с вызовом метода test для проверки равности переменных.
$class = new Klass;
            $class->check($data, function($someValue) use($amount){
                return $this->test($amount, $someValue);
});

Но проблема в том, что в коллбеке нет доступа к приватному методу класса Klass и возникает ошибка. Как реализовать коллбек либо передать параметры в него таким образом, чтобы внутри можно было вызвать приватный метод класса Klass?
Спасибо.
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 1
GeneMoss
@GeneMoss
void
Нужно связать Ваше замыкание с нужным объектом:
$class = new Klass;
$closure = function($someValue) use($amount) {
    return $this->test($amount, $someValue);
};
$closure = $closure->bindTo($class, 'Klass');
$class->check($data, $closure);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы