#php #интерфейс #рефлексия #php5
Можете, пожалуйста, подсказать почему в php 5.6.30 данный код: interface IInterface { public function someMethod(); public function anotherMethod(); } function classData( ReflectionClass $class ) { $details = ""; $name = $class->getName(); if ( $class->isInterface() ) { $details .= "$name -- это интерфейс
"; } if ( $class->isAbstract() ) { $details .= "$name -- это абстрактный класс
"; } return $details; } $class_info = new ReflectionClass('IInterface'); echo classData($class_info); выводит следующий результат: IInterface -- это интерфейс IInterface -- это абстрактный класс Т.е. почему интерфейс определяется как абстрактный класс? Если удалить методы из интерфейса, то отобразится: IInterface -- это интерфейс Интересный факт: hhvm лишён этого недостатка
Ответы
Ответ 1
Существует 2 типа «абстрактности» в php: explicit - класс, явно определённый, как abstract. implicit - класс/интерфейс, содержащий абстрактные методы. Проверить на explicit абстрактность можно так: if ($class->getModifiers() & ReflectionClass::IS_EXPLICIT_ABSTRACT) { // Перед нами абстрактный класс } Демонстрация
Комментариев нет:
Отправить комментарий