Сегодня я наткнулся на интересный вопрос. В контексте одного файла для нескольких объявлений, если класс B
реализует интерфейс A
, а класс C
расширяет класс A
, то класс B
должен быть объявлен до класса C
.
Следующий код не работает:
interface A {}
class C extends B {} // Class 'B' not found
class B implements A {}
Это исправляет это:
interface A {}
class B implements A {}
class C extends B {} // Class 'B' is found
Но это работает нормально:
class A {}
class C extends B {} // Class 'B' is found
class B extends A {}
Вот мои результаты на PHP 5.3.8 (Win32) и PHP 5.3.3-1ubuntu9.6 w/ suhosin.
Итак, вопрос в том, документировано ли такое поведение? Почему это работает с классами, но не с интерфейсами? Или это следует считать ошибкой?
Дайте мне знать о вашем опыте, прежде чем я начну копаться в исходном коде PHP и/или открою PHP bug ticket. :)
Спасибо!
Примечание: я знаю, что это просто вопрос порядка объявления классов, но это меня озадачивает... Если это неуместно, пожалуйста, не стесняйтесь закрывать.