Я наткнулся на интересную проблему сегодня. В контексте одного файла для нескольких объявлений, если класс 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 с suhosin.
Итак, вопрос в том, является ли это документированным поведением? Почему оно будет работать с классами, а не с интерфейсами? Или это следует считать ошибкой?
Дайте мне знать о вашем опыте, прежде чем я начну копаться в исходном коде PHP и / или открою билет с ошибкой PHP. :)
Спасибо!
Примечание: я знаю, что это просто вопрос порядка объявления классов, но это озадачивает меня ... Если это неуместно, пожалуйста, не стесняйтесь закрывать.