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


In function overridding why we not declare it static

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

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);

当我运行程序时,它显示错误:

Cannot make non static method functionover::override() static in class childfunctionover

为什么?

问题

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

如果父项具有static方法,则覆盖只能是static。不能将static转换为non-static

这是双向的。不能将non-static方法重写为static方法。这将违反许多继承规则。

当您重写方法时,规则如下:

  1. 子级的方法名必须与父级的方法名称完全相同
  2. Child的方法必须接受相同数量的参数。如果定义了一些默认值,它们必须相同
  3. 必须保留方法调用的类型(是否为static

这些可能不是适用的所有规则。欲了解更多信息,请访问手动

解决方案

将父方法更改为static,或从子方法中删除static关键字。