Я ищу ответ на несложный вопрос, но не могу выяснить, сколько интерфейсов может быть реализовано одним классом.
Это возможно?
class Class1 implements Interface1, Interface2, Interface3, Interface4 {
.....
}
Для всех подобных примеров, которые я нашел, я видел, что может быть только 2 интерфейса, реализованных одним классом. Но нет никакой информации о том, что я ищу.
Нет ограничений на количество интерфейсов, которые вы можете реализовать. По определению, вы можете только extend
(наследовать) один класс.
На практике я бы ограничил количество интерфейсов, которые вы реализуете, чтобы ваш класс не стал слишком громоздким и, следовательно, трудным для работы.
Да, более одного интерфейса могут быть реализованы одним классом.
От Руководство по PHP:
Классы могут реализовывать более одного интерфейса, если это необходимо, путем разделения
каждый интерфейс с запятой.
Я написал скрипт, который подтверждает вышеприведенные утверждения (что сумма не ограничена):
<?php
$inters_string = '';
$interfaces_to_generate = 9999;
for($i=0; $i <= $interfaces_to_generate; $i++) {
$cur_inter = 'inter'.$i;
$inters[] = $cur_inter;
$inters_string .= sprintf('interface %s {} ', $cur_inter);
}
eval($inters_string); // creates all the interfaces due the eval (executing a string as code)
eval(sprintf('class Bar implements %s {}', implode(',',$inters))); // generates the class that implements all that interfaces which were created before
$quxx = new Bar();
print_r(class_implements($quxx));
Вы можете изменить счетчик var в цикле for, чтобы этот скрипт генерировал еще больше интерфейсов для реализации классом «Bar».
Он легко работает с 9999 интерфейсами (и, очевидно, больше), как вы можете видеть из вывода последней строки кода (print_r) при выполнении этого скрипта.
Кажется, что память компьютера является единственным ограничением для количества интерфейсов, поскольку вы получаете ошибку исчерпания памяти, когда число слишком велико
Количество интерфейсов, которые может реализовать класс, не ограничено логически.
Вы можете реализовать столько классов, сколько захотите, в этом нет ограничений.
class Class1 implements Interface1, Interface2, Interface3, Interface4, Interface5, Interface6{
.....
}
Это означает, что это правильно
Надеюсь, это поможет вам