Журнал изменений ООП

Здесь перечислены изменения модели ООП в PHP. Описания и другие примечания этих возможностей можно найти в документации ООП PHP.

Версия Описание
7.4.0 Изменено: Теперь можно выбрасывать исключение в функции __toString().
7.4.0 Добавлено: поддержка ограниченной ковариантности типов возвращаемого значения и типов аргументов. Поддержка полной вариативности производится только если используется автозагрузка. Внутри одного файла возможны только нециклические ссылки на типы.
7.4.0 Добавлено: Теперь можно задавать тип для свойств класса.
7.3.0 Несовместимость: распаковка аргументов для Traversable с нецелочисленными ключами больше не поддерживается. Такое поведение изначально не планировалось и теперь удалено.
7.3.0 Несовместимость: в прошлых версиях можно было разделить статические свойства при помощи присваивания по ссылке. Теперь нельзя.
7.3.0 Изменено: теперь оператор instanceof допускает литералы в качестве первого операнда. В этом случае всегда будет возвращено FALSE.
7.2.0 Устарело: метод __autoload() объявлен устаревшим в пользу spl_autoload_register().
7.2.0 Изменено: для имен классов, интерфейсов и трейтов нельзя использовать слово object.
7.2.0 Изменено: для группового use теперь можно добавлять висящую запятую в конце списка.
7.2.0 Изменено: Типы параметров из переопределенных методов и реализации интерфейсов теперь указывать не обязательно
7.2.0 Изменено: если один абстрактный класс наследует от другого абстрактного класса, то он может переопределять его абстрактные методы.
7.1.0 Изменено: для имен классов, интерфейсов и трейтов нельзя использовать слова: void и iterable.
7.1.0 Добавлено: теперь можно задавать область видимости для констант классов.
7.0.0 Устарело: Статический вызов нестатических методов.
7.0.0 Устарело: конструктор в стиле PHP 4. Т.е. метод с именем идентичным имени класса, в котором он объявлен.
7.0.0 Добавлено: групповая декларация use: классы, функции и константы, которые надо импортировать из одного и того же пространства имен теперь могут быть сгруппированы в одном выражении use.
7.0.0 Добавлено: добавлена поддержка анонимных классов с помощью new class.
7.0.0 Несовместимость: итерирование объектов не реализующих Traversable теперь ведет себя аналогично итерированию массива по ссылке.
7.0.0 Изменено: Определение одинаковых (полностью совпадающих) свойств в двух трейтах больше не вызывает ошибку.
5.6.0 Добавлено: метод __debugInfo().
5.5.0 Добавлено: магическая константа ::class.
5.5.0 Добавлено: finally в обработчик исключений.
5.4.0 Добавлено: трейты.
5.4.0 Изменено: Если абстрактный класс определяет сигнатуру для конструктора, то она будет принудительно применяться.
5.3.3 Изменено: Методы с тем же именем, что и последний элемент пространства имен класса больше не будут рассматриваться как конструктор. Это изменение не влияет классы, не использующие пространства имен.
5.3.0 Изменено: Больше не требуется, чтобы классы, реализующие интерфейсы с методами, которые имеют значения по умолчанию в прототипе, соответствовали значениям по умолчанию в интерфейсе.
5.3.0 Изменено: Теперь стало возможным ссылаться на класс, используя переменную (например, echo $classname::constant;). Значение переменной не может быть ключевым словом (например, self, parent или static).
5.3.0 Изменено: Ошибка E_WARNING происходит, если магические перегруженные методы объявлены как статические. Это также усиливает требование, что эти методы должны быть общедоступными.
5.3.0 Изменено: До 5.3.0, исключения в функции __autoload() не могли быть перехвачены в блоке catch и приводили к фатальной ошибке. Сейчас исключения в функции __autoload могут быть перехвачены в блоке catch, но с одной оговоркой. Если перехватывается пользовательское исключение, то класс, обрабатывающий это исключение, должен быть доступен. Функция __autoload может быть использована рекурсивно для автозагрузки пользовательского класса обработки исключения.
5.3.0 Добавлено: Метод __callStatic.
5.3.0 Добавлено: Поддержка heredoc и nowdoc для констант и определений свойств класса. Примечание: Значение heredoc должны следовать тем же правилам, что и строки в двойных кавычках (например, без переменных внутри).
5.3.0 Добавлено: Позднее статическое связывание.
5.3.0 Добавлено: метод __invoke().
5.2.0 Изменено: Метод __toString() вызывался только, когда он напрямую объединен с echo или print. Сейчас он вызывается в любом контексте строки (например, в printf() с модификатором %s), но не в других типах контекста (например, с модификатором %d). С PHP 5.2.0, преобразование объектов без метода __toString в строку выдает ошибку уровня E_RECOVERABLE_ERROR.
5.1.3 Изменено: В предыдущих версиях PHP 5 использование var считалось устаревшим и выдавало ошибку E_STRICT. Сейчас это не считается устаревшим, поэтому ошибка больше не выдается.
5.1.0 Изменено: Статический метод __set_state() теперь вызывается для классов, экспортируемых функцией var_export().
5.1.0 Добавлены: методы __isset() и __unset().

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top