oop — дочерний класс PHP не может реализовать те же реализации родительского класса интерфейса

Это нормальное поведение, что дочерний класс не может реализовать тот же интерфейс родительского класса реализует? Я получил PHP v5.6

interface blueprint {
public function implement_me();
}

class one implements blueprint {

public function implement_me() {

}

}

class two extends one implements blueprint {}

//no fatal error triggered for class two

РЕДАКТИРОВАТЬ: Так что приведенный выше код прекрасно работает без ошибок и предупреждений, хотя я реализовал интерфейс blueprint в детском классе two не имея метода impement_me() почему дочерний класс не может реализовать тот же интерфейс, который реализует родительский класс?

если я реализую другой интерфейс, кроме blueprint для класса two тогда это работает, и я должен использовать blueprint_new методы внутри класса two в противном случае произошла фатальная ошибка. Эта часть работает как задумано.

interface blueprint {
public function implement_me();
}

class one implements blueprint {

public function implement_me() {

}

}interface blueprint_new {
public function todo();
}class two extends one implements blueprint_new {}

//this will trigger fatal error.

3

Решение

Дочерний класс автоматически наследует все интерфейсы от родительского класса.

Иногда вы не хотите этого, но вы все еще можете реализовать любой, даже несколько интерфейсов в дочернем классе.

Единственное, что не работает, — это расширение интерфейса, так же как класс (или абстрактный класс) не может быть реализован.

Ошибка, вызванная вашим вторым кодом, заключается в том, что вы не реализовали все методы интерфейса blueprint_new в классе two, но в принципе в вашем коде нет ничего плохого.

Пример:

class MobilePhone implements GsmSignalPowered {}
class SamsungGalaxy extends MobilePhone implements UsbConnection {}
interface ThunderboltPowered {}
interface GsmSignalPowered {}
interface UsbConnection {}

$s = new SamsungGalaxy();
var_dump($s instanceof GsmSignalPowered); // true
var_dump($s instanceof UsbConnection); // true
var_dump($s instanceof ThunderboltPowered); // false

$m = new MobilePhone();
var_dump($m instanceof GsmSignalPowered); // true
var_dump($m instanceof UsbConnection); // false
var_dump($m instanceof ThunderboltPowered); // false
6

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector