Запуск __call() в PHP, даже когда существует метод

документация по PHP говорит следующее о магическом методе __call():

__ вызов() запускается при вызове недоступных методов в контексте объекта.

Есть ли способ, которым я могу вызвать __call(), даже если существует метод, до вызова фактического метода? Или, есть ли какой-нибудь другой крюк, который я могу реализовать, или другой способ, который обеспечил бы эту функциональность?

Если это имеет значение, это для static function (и я бы предпочел использовать __callStatic).

Ответы

Ответ 1

Как просто защитить все ваши другие методы и проксировать их через __callStatic?

namespace test\foo;

class A
{
    public static function __callStatic($method, $args)
    {
        echo __METHOD__ . "\n";

        return call_user_func_array(__CLASS__ . '::' . $method, $args);
    }

    protected static function foo()
    {
        echo __METHOD__ . "\n";
    }
}

A::foo();

Ответ 2

Почему бы просто не защитить все ваши методы и вызвать их с помощью __call():

 class bar{
    public function __call($method, $args){
        echo "calling $method";
        //do other stuff
        //possibly do method_exists check
        return call_user_func_array(array($this, $method), $args);
    }
    protected function foo($arg){
       return $arg;
    }
 }

$bar = new bar;
$bar->foo("baz"); //echo 'calling foo' and returns 'baz'