Чудно́е в PHP

На работе сейчас с любопытным багом в ПХП разбирались. Разобрались, вот выжимка:
interface I {}

var_dump(class_exists('cI')); // false
var_dump(class_exists('C')); // true

class cI implements I {}
class C {}

var_dump(class_exists('cI')); // true
var_dump(class_exists('C')); // true

Выходит, если класс реализует интерфейс, то его не существует выше строки, где он декларируется, класс без реализации интерфейса виден в любом месте. Версия ПХП — 5.5.11. Я для интереса попробовал на 5.6а1 (есть под рукой собранный) — работает так же.
20 июня 2014 09:40

Сергей Морозов (morozov.livejournal.com)
20 июня 2014, 12:47

Интересно, что и HHVM (3.1) ведёт себя так же. «Эмулируют» ПХП-шные баги для совместимости.

Алек (инкогнито)
20 июня 2014, 13:23

Занятно. Есть такой же баг про трейты: https://bugs.php.net/bug.php?id=67114

Евгений Степанищев (bolknote.ru)
20 июня 2014, 14:08, ответ предназначен Алеку

И там же есть ответ:
This is a nifty case: Only "simple" classes are fully available after compile time, classes with "complexer" things (interface,traits, ...) will be bound and made available at runtime in the place where they are declared.

PHP (инкогнито)
21 июня 2014, 17:21

Вся правда о ПЫХе:

lurkmore.to/PHP

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)