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

时间:2015-03-25 08:46:58

标签: php function-overriding static-functions

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

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

怎么回事?

1 个答案:

答案 0 :(得分:2)

问题

当我们讨论继承,扩展和重写方法时,PHP有点严格(那些不是函数!不要被function关键字欺骗。)。

如果父有static方法,那么您的覆盖只能 static。您无法将static转换为non-static

这两种方式都有效。您无法将non-static方法覆盖为static个方法。这会违反许多继承规则。

当您覆盖方法时,规则如下:

  1. 儿童的方法名称必须与父方法名称
  2. 完全相同
  3. Child的方法必须接受相同数量的参数。如果定义了某些默认值,则它们必须相同
  4. 必须保留方法的调用类型(static或不调用)。
  5. 那些可能不适用的所有规则。有关更多信息,请转至Manual

    解决方案

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