0

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

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

怎么来的?

4

1 回答 1

2

问题

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

如果 parent 有static方法,那么您的覆盖只能static. 你不能static变成non-static.

这是双向的。您不能将non-static方法覆盖为static一种。这将违反许多继承规则。

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

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

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

解决方案

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

于 2015-03-25T08:56:32.830 回答