mirror of
https://github.com/php/doc-ru.git
synced 2025-08-16 18:22:04 +00:00

git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@347762 c90b9560-bf6c-de11-be94-00142212c4b1
334 lines
14 KiB
XML
334 lines
14 KiB
XML
<?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
|
||
-->
|