PHP:每当调用子类中的函数时,都会调用函数


PHP: Calling a function whenever a function in a child class is called

在一个类中,我可以在实际运行任何函数之前使用_调用/_callStatic函数来调用函数。然而,我还没有找到一个可以应用于父母的解决方案,它将由孩子继承。

我能想到的唯一方法是在每个调用父类中函数的类中放入一小段代码,该类包含我的代码。

有什么更好的解决方案可以实施吗?

只要您至少在php5.4上,就可以使用traits。http://php.net/traits

这将需要在代码中进行一些调整,但可能会允许所需的行为。你有关于你的用例的更多信息吗?我想根据你的描述进行日志记录,这是正确的吗?

不幸的是,PHP中没有神奇的方法,只要调用任何方法都可以运行。

我认为您正在寻找的解决方案是一个装饰器,请参阅本文中关于在PHP中装饰方法/类的提示。

如何在PHP中实现装饰器?

如果没有看到一些代码,很难帮助您。然而,假设您没有在子类中重新定义__call/__callStatic,那么它应该简单地从它的超类继承方法。

如果在子类中重新定义__call/__callStatic,它将覆盖超类的定义。因此,您必须以某种方式调用超类的方法。为此,您可以使用parent关键字。参见此示例:

class SuperClass
{
    public function __call($name, $arguments)
    {
        // Do some stuff
    }
}
class SubClass extends SuperClass
{
    public function __call($name, $arguments)
    {
        // Execute the parent's __call() method
        return parent::__call($name, $arguments);
        // Do some extra stuff here
    }
}