在 PHP 中触发 __call() (即使存在方法)
2022-08-30 22:03:56
PHP文档对魔术方法有如下描述:__call()
__call() 在对象上下文中调用不可访问的方法时触发。
有没有办法,即使存在一个方法,在调用实际方法之前,我也可以调用?或者,是否有其他一些我可以实现的钩子或其他方式可以提供此功能?__call()
如果它很重要,这是为了论坛(我实际上更喜欢使用)。static function
__callStatic
PHP文档对魔术方法有如下描述:__call()
__call() 在对象上下文中调用不可访问的方法时触发。
有没有办法,即使存在一个方法,在调用实际方法之前,我也可以调用?或者,是否有其他一些我可以实现的钩子或其他方式可以提供此功能?__call()
如果它很重要,这是为了论坛(我实际上更喜欢使用)。static function
__callStatic
为什么不保护所有方法,并使用__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's 'calling foo' and returns 'baz'
如何使所有其他方法受到保护,并通过__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();