我的问题之前的一句话是说我对PHP中的OOP很新,我非常感谢网站,你们都非常感谢阅读 - 有时回答得很漂亮(如你所见here或here,甚至here)并帮助我度过了很长时间(类似)改进课程。
我以前的所有问题都引导着我今天的问题:
在扩展PDOStatement的类中,每次调用其中一个父公共方法时,如何触发默认操作?
我可以这样做:
class genc_query extends PDOStatement{
public function rowCount(){
$this->myDefaultAction();
return parent::rowCount();
}
}
但是因为我需要以相同的方式改变几乎所有的本机方法,我想知道是否无法触发像__call()这样的函数,就像这些方法是私有的一样(因为它不可能使它们成为私有的)
答案 0 :(得分:1)
因为不可能将它们设为私有
事实上,情况确实如此。
ReflectionMethod can let you change the accessibility of a method,但它似乎不适用于内部方法(即不是用户定义的),也不会将公共方法设置为protected / private。它似乎旨在使受保护/私有方法公开。
看起来每个方法中的复制粘贴样板都是必要的。除了__sleep
和__wakeup
之外,只有大约三十种方法,所以它只需要几分钟。
答案 1 :(得分:1)
为了清晰的代码,扩展每个方法(意思是:覆盖并在那里调用parent::method()
),你想要有其他行为。否则,有一天,你或其他人可能会对那里发生的事情感到困惑。