Чудно́е в 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 (есть под рукой собранный) — работает так же.

Поделиться
Отправить
4 комментария
Сергей Морозов (morozov.livejournal.com)

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

Алек

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

Евгений Степанищев (bolknote.ru)

Комментарий для Алек:

И там же есть ответ:

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

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

lurkmore.to/PHP

Популярное