我试图弄清楚如何捕获在PHP中调用对象的任何方法.我知道魔术函数__call,但它仅针对被调用对象上不存在的方法触发.
例如,我有这样的事情:
class Foo
{
public function bar()
{
echo 'foobar';
}
public function override($method_name,$method_args)
{
echo 'Calling method ',$method_name,'<br />';
$this->$method_name($method_args); //dirty, but working
}
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时:
$foo = new Foo();
$foo->bar();
Run Code Online (Sandbox Code Playgroud)
我想要这个输出:
Calling method bar
foobar
Run Code Online (Sandbox Code Playgroud)
而不是这一个:
foobar
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做到这一点吗?请帮忙 :)
我有一个静态方法的类,我想在调用方法之前拦截方法调用.
所以,如果我打电话
$model = DataMapper::getById(12345);
Run Code Online (Sandbox Code Playgroud)
然后我希望在调用此方法之前调用DataMapper中的某个方法,然后可选地,此拦截方法可以随后调用self :: getById(12345).有没有办法做到这一点?
我正在我的服务器上实现Memcache,所以这就是我想拦截方法调用的原因.如果模型已经被缓存,我不希望静态方法查询数据库,并且我也不想冗余地修改数百种不同的映射器方法来支持memcache.
我正在运行PHP 5.2.6.