Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:在调用子类中的函数时调用函数_Php_Function_Class_Overloading - Fatal编程技术网

PHP:在调用子类中的函数时调用函数

PHP:在调用子类中的函数时调用函数,php,function,class,overloading,Php,Function,Class,Overloading,在单个类中,我可以使用_call/_callStatic函数在实际运行任何函数之前调用函数。然而,我还没有找到一个解决方案,我可以适用于父母,它将由子女继承 我能想到的唯一方法是在调用父函数(包含我的代码)的每个类中放入一小段代码 有什么更好的解决方案可以实现吗?不幸的是,PHP中没有神奇的方法可以在调用任何方法时运行 我认为您正在寻找的解决方案是一个decorator,有关在PHP中装饰方法/类的提示,请参阅本文 如果没有看到一些代码,很难帮助您。但是,假设您没有在子类中重新定义\uuuu c

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

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


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

不幸的是,PHP中没有神奇的方法可以在调用任何方法时运行

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


如果没有看到一些代码,很难帮助您。但是,假设您没有在子类中重新定义
\uuuu call
/
\uuuu callStatic
,它应该只从其超类继承方法

如果在子类中重新定义
\uuu call
/
\uuuu 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
    }
}

只要您至少使用PHP5.4,就可以使用traits。

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

\u调用
确实会被子类继承。而且它不会在“任何函数实际运行之前”运行。当实际调用的函数不存在(或在该范围内不可访问)时调用它。你的问题我不太清楚。你能添加一些演示代码吗?每次函数运行时,我都想记录它已经运行的事实,以及它的类、名称和参数。在整个应用程序中?这也可以通过调用堆栈实现。否则它可能会相当困难,或者至少会打破一些“良好的编码”实践。我会考虑一下,也许会提供一些例子。是的,在整个应用程序中。我有一个主类,它有一些初始化函数,还有几个类扩展了主类,每个主类都包含与不同用途相关的函数。