在一个类中,我可以使用_callStatic函数在实际运行任何函数之前调用函数。但是,我还没有找到可以应用于父母的解决方案,并且会由子女继承。PHP:每次调用子类中的函数时调用函数
我能想到的唯一方法是在每个类中调用一小段代码,该代码在包含我的代码的父代中调用一个函数。
有没有更好的解决方案可以实现?
在一个类中,我可以使用_callStatic函数在实际运行任何函数之前调用函数。但是,我还没有找到可以应用于父母的解决方案,并且会由子女继承。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
}
}
只要你至少在PHP 5.4,你可以使用特质。 http://php.net/traits
这将需要在您的代码中进行一些调整,但可能会允许所需的行为。 你有更多关于你的用例的信息吗?我想从你的描述中记录下来,这是正确的吗?
'__call'不会被子类继承。在任何函数实际运行之前,它都不会运行。当您实际调用的函数不存在(或在该范围内不可访问)时会调用它。你的问题对我来说不是很清楚。你可以添加一些演示代码? –