Журнал изменений ООП
Здесь перечислены изменения модели ООП в 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(). |