Как передать метод в метод класса PHP?

Пытаюсь передать метод в другой метод класса. Например, с функциями это работает так:

function a($a)
{
    $a();
}

function b()
{
    echo '1231231';
}

$d = a('b');

Хочу такое сделать с методами класса, но не работает. Пробовал так:

class Test
{
    public function c() {
        $this->aa($this->b);
    }

    public function b()
    {
        echo '1231231';
    }

    public function aa($a)
    {
        $a();
    }
}

$inst = new Test();

$inst->c();

Есть ли способ решить такую проблему?


Ответы (1 шт):

Автор решения: teran

$this->b это обращение к члену класса, объявленному как, например, private $b. Вы же хотите передать ссылку на метод объекта. Поскольку речь идет об обычном (не статичном) методе класса, то передается такая ссылки в виде [$this, 'b']. То есть адрес объекта и метод, который надо вызвать.

В случае статического метода передавать надо метод класса и имя метода, например, [A:classname, 'b'].

Входящий параметр для функций обратного вызова можно описать как callable

https://www.php.net/manual/ru/language.types.callable.php

→ Ссылка