相关疑难解决方法(0)

如何在PHP中捕获对象的任何方法调用?

我试图弄清楚如何捕获在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)

有什么方法可以做到这一点吗?请帮忙 :)

php object interception

27
推荐指数
1
解决办法
1万
查看次数

拦截对PHP中方法的调用

我有一个静态方法的类,我想在调用方法之前拦截方法调用.

所以,如果我打电话

$model = DataMapper::getById(12345);
Run Code Online (Sandbox Code Playgroud)

然后我希望在调用此方法之前调用DataMapper中的某个方法,然后可选地,此拦截方法可以随后调用self :: getById(12345).有没有办法做到这一点?

我正在我的服务器上实现Memcache,所以这就是我想拦截方法调用的原因.如果模型已经被缓存,我不希望静态方法查询数据库,并且我也不想冗余地修改数百种不同的映射器方法来支持memcache.

我正在运行PHP 5.2.6.

php memcached

5
推荐指数
1
解决办法
3062
查看次数

标签 统计

php ×2

interception ×1

memcached ×1

object ×1