Files
php-doc-ru/language/oop5/changelog.xml
Andrey Gromov 0e1c4974ca upd
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@347762 c90b9560-bf6c-de11-be94-00142212c4b1
2019-07-17 19:37:33 +00:00

334 lines
14 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 1319917d0ffc1a1e48fed0ebb0c2cc00615fd81d Maintainer: mch Status: ready -->
<!-- Reviewed: yes Maintainer: lex -->
<!-- $Revision$ -->
<sect1 xml:id="language.oop5.changelog" xmlns="http://docbook.org/ns/docbook">
<title>Журнал изменений ООП</title>
<para>
Здесь перечислены изменения модели ООП в PHP. Описания и другие примечания
этих возможностей можно найти в документации ООП PHP.
</para>
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.4.0</entry>
<entry>
Изменено: Теперь можно выбрасывать исключение в функции
<function>__toString</function>.
</entry>
</row>
<row>
<entry>7.4.0</entry>
<entry>
Добавлено: поддержка ограниченной ковариантности типов
возвращаемого значения и типов аргументов. Поддержка
полной вариативности производится только если
используется автозагрузка. Внутри одного файла
возможны только нециклические ссылки на типы.
</entry>
</row>
<row>
<entry>7.4.0</entry>
<entry>
Добавлено: Теперь можно задавать тип для свойств класса.
</entry>
</row>
<row>
<entry>7.3.0</entry>
<entry>
Несовместимость: распаковка аргументов для
<classname>Traversable</classname> с нецелочисленными ключами
больше не поддерживается. Такое поведение изначально не
планировалось и теперь удалено.
</entry>
</row>
<row>
<entry>7.3.0</entry>
<entry>
Несовместимость: в прошлых версиях можно было разделить
статические свойства при помощи присваивания по ссылке.
Теперь нельзя.
</entry>
</row>
<row>
<entry>7.3.0</entry>
<entry>
Изменено: теперь оператор
<link linkend="language.operators.type">instanceof</link>
допускает литералы в качестве первого операнда. В этом
случае всегда будет возвращено &false;.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Устарело: метод <function>__autoload</function> объявлен устаревшим
в пользу <function>spl_autoload_register</function>.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Изменено: для имен классов, интерфейсов и трейтов нельзя использовать слово <literal>object</literal>.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Изменено: для группового use теперь можно добавлять висящую запятую в конце списка.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Изменено: Типы параметров из переопределенных методов
и реализации интерфейсов теперь указывать не обязательно
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Изменено: если один абстрактный класс наследует от другого
абстрактного класса, то он может переопределять
его абстрактные методы.
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
Изменено: для имен классов, интерфейсов и трейтов нельзя использовать слова: <literal>void</literal> и <literal>iterable</literal>.
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
Добавлено: теперь можно задавать
<link linkend="language.oop5.visiblity-constants">область видимости для констант классов</link>.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Устарело: <link linkend="language.oop5.static">Статический</link> вызов нестатических методов.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Устарело: <link linkend="language.oop5.decon">
конструктор</link> в стиле PHP 4. Т.е. метод с именем идентичным
имени класса, в котором он объявлен.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Добавлено: групповая декларация <emphasis>use</emphasis>:
классы, функции и константы, которые надо импортировать
из одного и того же пространства имен теперь могут быть
сгруппированы в одном выражении use.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Добавлено: добавлена поддержка
<link linkend="language.oop5.anonymous">анонимных классов</link>
с помощью <literal>new class</literal>.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Несовместимость: итерирование объектов не реализующих
<classname>Traversable</classname> теперь ведет себя аналогично
итерированию массива по ссылке.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Изменено: Определение одинаковых (полностью совпадающих) свойств
в двух <link linkend="language.oop5.traits">трейтах</link> больше не вызывает ошибку.
</entry>
</row>
<row>
<entry>5.6.0</entry>
<entry>
Добавлено: метод <link linkend="object.debuginfo">__debugInfo()</link>.
</entry>
</row>
<row>
<entry>5.5.0</entry>
<entry>
Добавлено: магическая константа <link linkend="language.oop5.basic.class.class">::class</link>.
</entry>
</row>
<row>
<entry>5.5.0</entry>
<entry>
Добавлено: <link linkend="language.exceptions">finally</link> в обработчик исключений.
</entry>
</row>
<row>
<entry>5.4.0</entry>
<entry>
Добавлено: <link linkend="language.oop5.traits">трейты</link>.
</entry>
</row>
<row>
<entry>5.4.0</entry>
<entry>
Изменено: Если <link linkend="language.oop5.abstract">абстрактный</link> класс
определяет сигнатуру для <link
linkend="language.oop5.decon">конструктора</link>, то она будет принудительно применяться.
</entry>
</row>
<row>
<entry>5.3.3</entry>
<entry>
Изменено: Методы с тем же именем, что и последний элемент
<link linkend="language.namespaces">пространства имен</link>
класса больше не будут рассматриваться как <link
linkend="language.oop5.decon">конструктор</link>. Это изменение не влияет
классы, не использующие пространства имен.
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Изменено: Больше не требуется, чтобы классы, реализующие интерфейсы с методами,
которые имеют значения по умолчанию в прототипе, соответствовали значениям
по умолчанию в интерфейсе.
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Изменено: Теперь стало возможным ссылаться на класс, используя переменную (например,
<literal>echo $classname::constant;</literal>).
Значение переменной не может быть ключевым словом (например, <literal>self</literal>,
<literal>parent</literal> или <literal>static</literal>).
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Изменено: Ошибка <constant>E_WARNING</constant> происходит, если
магические <link linkend="language.oop5.overloading">перегруженные</link>
методы объявлены как <link linkend="language.oop5.static">статические</link>.
Это также усиливает требование, что эти методы должны быть общедоступными.
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Изменено: До 5.3.0, исключения в функции
<function>__autoload</function> не могли быть
перехвачены в блоке <link linkend="language.exceptions">catch</link> и
приводили к фатальной ошибке. Сейчас исключения в функции __autoload
могут быть перехвачены в блоке <link linkend="language.exceptions">catch</link>,
но с одной оговоркой. Если перехватывается пользовательское исключение, то класс,
обрабатывающий это исключение, должен быть доступен. Функция __autoload может быть
использована рекурсивно для автозагрузки пользовательского
класса обработки исключения.
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Добавлено: Метод <link linkend="language.oop5.overloading">__callStatic</link>.
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Добавлено: Поддержка <link linkend="language.types.string.syntax.heredoc">heredoc</link>
и <link linkend="language.types.string.syntax.heredoc">nowdoc</link>
для <emphasis>констант</emphasis> и определений свойств класса.
Примечание: Значение heredoc должны следовать тем же правилам, что и строки в двойных кавычках
(например, без переменных внутри).
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Добавлено: <link linkend="language.oop5.late-static-bindings">Позднее статическое связывание</link>.
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Добавлено: метод <link linkend="object.invoke">__invoke()</link>.
</entry>
</row>
<row>
<entry>5.2.0</entry>
<entry>
Изменено: Метод <link linkend="object.tostring">__toString()</link>
вызывался только, когда он напрямую объединен с
<function>echo</function> или <function>print</function>.
Сейчас он вызывается в любом контексте строки (например, в
<function>printf</function> с модификатором <literal>%s</literal>), но не
в других типах контекста (например, с модификатором <literal>%d</literal>).
С PHP 5.2.0, преобразование объектов без метода <link linkend="object.tostring">__toString</link>
в строку выдает ошибку уровня <constant>E_RECOVERABLE_ERROR</constant>.
</entry>
</row>
<row>
<entry>5.1.3</entry>
<entry>
Изменено: В предыдущих версиях PHP 5 использование <literal>var</literal>
считалось устаревшим и выдавало ошибку <constant>E_STRICT</constant>.
Сейчас это не считается устаревшим, поэтому ошибка больше не выдается.
</entry>
</row>
<row>
<entry>5.1.0</entry>
<entry>
Изменено: Статический метод <link linkend="object.set-state">__set_state()</link>
теперь вызывается для классов, экспортируемых функцией <function>var_export</function>.
</entry>
</row>
<row>
<entry>5.1.0</entry>
<entry>
Добавлены: методы <link linkend="object.isset">__isset()</link>
и <link linkend="object.unset">__unset()</link>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->