Запуск __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'