Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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_Overriding_Static Functions - Fatal编程技术网

Php 在函数重写中,为什么不将其声明为静态

Php 在函数重写中,为什么不将其声明为静态,php,overriding,static-functions,Php,Overriding,Static Functions,我有一个子类,我在其中定义了一个静态函数: class functionover { function override($num1, $num2) { $total = $num1+$num2; } } class childfunctionover extends functionover { static function override($num1, $num2) { $sum = $num1+$num2;

我有一个子类,我在其中定义了一个静态函数:

class functionover
{
    function override($num1, $num2)
    {
        $total = $num1+$num2;
    }


}
class childfunctionover extends functionover
{
    static function override($num1, $num2)
    {
        $sum = $num1+$num2;
    }
}



functionover :: override(10, 20);
当我运行程序时,它显示错误:

无法在类childfunctionover中将非静态方法functionover::override()设为静态

为什么会这样?

问题 当我们谈论继承、扩展和重写方法(这些不是函数!不要被
function
keyword]愚弄)时,PHP有点严格

如果父级有
static
方法,则您的覆盖只能
static
。不能将
静态
转换为
非静态

这是双向的。您不能将
非静态
方法重写为
静态
方法。这将违反许多继承规则

重写方法时,规则如下所示:

  • 子方法名必须与父方法名完全相同
  • 子方法必须接受相同数量的参数。如果定义了一些默认值,则它们必须相同
  • 必须保留方法调用的类型(
    静态
    或非静态) 这些并不是所有适用的规则。有关更多信息,请访问

    解决方案 将父对象的方法更改为
    static
    或从子对象的方法中删除
    static
    关键字