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
关键字