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

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

Версия | Описание
--- | ---
8.4.0 | Добавили: Поддержка хуков свойств.
8.4.0 | Добавили: Поддержка «Ленивых объектов».
8.1.0 | Добавили: Поддержка модификатора final для констант класса. Кроме того, константы интерфейса по умолчанию становятся переопределяемыми.
8.0.0 | Добавили: Поддержка Null-безопасного оператора ?-> для доступа к свойствам и методам объектов, которые иногда равны null.
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().

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open