Журнал змін ОВП

Тут перераховані зміни моделі ОВП у PHP. Описи та інші примітки цих можливостей можна знайти у документації ОВП PHP.

ВерсияОпис
8.1.0Додано: Підтримка модифікатора final для констант класу. Крім того, константи інтерфейсу за умовчанням стають перевизначуваними.
8.0.0Додано: Підтримка оператора Nullsafe?-> для доступу до властивостей та методів об'єктів, які можуть дорівнювати 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;). Значення змінної не може бути ключовим словом (наприклад, selfparentили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, перетворення об'єктів без методу __function toString() { [native code] } у рядок видає помилку рівня E_RECOVERABLE_ERROR
5.1.3Змінено: У попередніх версіях PHP 5 використання var вважалося застарілим і видавало помилку E_STRICT. . Наразі це не вважається застарілим, тому помилка більше не видається.
5.1.0Змінено: Статичний метод __set_state() тепер викликається для класів, що експортуються функцією var_export()
5.1.0Додані: методи __isset() і __unset()