В переопределении функции, почему мы не объявляем это статическим

У меня есть дочерний класс, где я определяю статическую функцию:

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

Как так?

0

Решение

вопрос

PHP довольно строг, когда мы говорим о наследовании, расширении и переопределении методов (это не функции! Не обманывайте себя function ключевое слово.).

Если родитель имеет static метод, то ваша переопределение может только быть static, Вы не можете повернуть static в non-static,

Это работает в обе стороны. Вы не можете переопределить non-static метод быть static один. Это нарушит многие правила наследования.

Когда вы переопределяете методы, правила таковы:

  1. Имя дочернего метода должно совпадать с именем родительского метода
  2. Детский метод должен принимать одинаковое количество аргументов. Если определены некоторые значения по умолчанию, они должны быть одинаковыми
  3. Тип вызова метода (static или нет) должны быть сохранены.

Это могут быть не все правила, которые применяются. Для получения дополнительной информации перейдите к Руководство

Решение

Либо измените метод родителя на static или удалить static Ключевое слово из метода ребенка.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]