调用父公共方法时触发函数(如__call)

时间:2011-04-12 23:28:02

标签: php oop pdo

我的问题之前的一句话是说我对PHP中的OOP很新,我非常感谢网站,你们都非常感谢阅读 - 有时回答得很漂亮(如你所见herehere,甚至here)并帮助我度过了很长时间(类似)改进课程。

我以前的所有问题都引导着我今天的问题:
在扩展PDOStatement的类中,每次调用其中一个父公共方法时,如何触发默认操作?

我可以这样做:

class genc_query extends PDOStatement{
  public function rowCount(){
    $this->myDefaultAction();
    return parent::rowCount();
  }
}

但是因为我需要以相同的方式改变几乎所有的本机方法,我想知道是否无法触发像__call()这样的函数,就像这些方法是私有的一样(因为它不可能使它们成为私有的)

2 个答案:

答案 0 :(得分:1)

  

因为不可能将它们设为私有

事实上,情况确实如此。

ReflectionMethod can let you change the accessibility of a method,但它似乎不适用于内部方法(即不是用户定义的),也不会将公共方法设置为protected / private。它似乎旨在使受保护/私有方法公开。

看起来每个方法中的复制粘贴样板都是必要的。除了__sleep__wakeup之外,只有大约三十种方法,所以它只需要几分钟。

答案 1 :(得分:1)

为了清晰的代码,扩展每个方法(意思是:覆盖并在那里调用parent::method()),你想要有其他行为。否则,有一天,你或其他人可能会对那里发生的事情感到困惑。