我有一个子类,在其中我定义了一个静态函数:
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
方法。这将违反许多继承规则。
当您重写方法时,规则如下:
- 子级的方法名必须与父级的方法名称完全相同
- Child的方法必须接受相同数量的参数。如果定义了一些默认值,它们必须相同
- 必须保留方法调用的类型(是否为
static
)
这些可能不是适用的所有规则。欲了解更多信息,请访问手动
解决方案
将父方法更改为static
,或从子方法中删除static
关键字。