<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration85.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'migration85.incompatible.php',
    1 => 'Изменения, которые ломают обратную совместимость',
    2 => 'Изменения, которые ломают обратную совместимость',
  ),
  'up' => 
  array (
    0 => 'migration85.php',
    1 => 'Миграция с PHP 8.4.x на PHP 8.5.x',
  ),
  'prev' => 
  array (
    0 => 'migration85.constants.php',
    1 => 'Новые глобальные константы',
  ),
  'next' => 
  array (
    0 => 'migration85.deprecated.php',
    1 => 'Устаревшая функциональность',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'appendices/migration85/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration85.incompatible" class="sect1">
 <h2 class="title">Изменения, которые ломают обратную совместимость</h2>

 <div class="sect2" id="migration85.incompatible.core">
  <h3 class="title">Ядро PHP</h3>

  <div class="sect3" id="migration85.incompatible.core.array-callable-alias">
   <h4 class="title">Псевдонимы <code class="literal">&quot;array&quot;</code> и <code class="literal">&quot;callable&quot;</code></h4>

   <p class="simpara">
    Слова <code class="literal">&quot;array&quot;</code> и <code class="literal">&quot;callable&quot;</code> больше нельзя указывать
    как псевдонимы классов при вызове функции <span class="function"><a href="function.class-alias.php" class="function">class_alias()</a></span>.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.loosely-comparing-object">
   <h4 class="title">Нестрогое сравнение несравнимых объектов</h4>

   <p class="simpara">
    Нестрогое сравнение несравнимых объектов —
    перечислений, объектов <span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span> и других внутренних классов —
    с логическими значениями прежде оставалось непоследовательным.
    При сравнении с логическим литералом в выражениях наподобие <code class="code">$object == true</code>
    объект неявно приводился к логическому значению, как если бы сравнение выполняли с явным приведением типа: <code class="code">(bool) $object</code>.
    При сравнении со значением, которое невозможно вычислить в статическом контексте, — в выражениях наподобие
    <code class="code">$object == $true</code>, возвращалось значение <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
    Поведение унифицировали: объекты без внутренней логики сравнения теперь сравниваются только после неявного приведения <code class="code">(bool) $object</code>.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.gc-collect-cycles">
   <h4 class="title">Значение возврата функции gc_collect_cycles</h4>

   <p class="simpara">
    Значение, которое возвращает функция <span class="function"><a href="function.gc-collect-cycles.php" class="function">gc_collect_cycles()</a></span>, больше не включает строки и ресурсы,
    которые сборщик мусора попутно собрал при удалении циклических ссылок.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.substitute-final-subclasses">
   <h4 class="title">Замена ключевого слова static в окончательном подклассе</h4>

   <p class="simpara">
    В окончательных подклассах ключевое слово <span class="type">static</span> разрешили заменять
    на <span class="type">self</span> или название конкретного класса.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.tick-handlers">
   <h4 class="title">Обработчики тиков</h4>

   <p class="simpara">
    Обработчики тиков теперь деактивируются после выполнения всех функций
    завершения работы, запуска деструкторов и очистки обработчиков вывода.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.trait-binding">
   <h4 class="title">Связывание трейтов</h4>

   <p class="simpara">
    Теперь трейты связываются до родительского класса.
    Небольшое изменение в поведении, которое больше соответствует ожиданиям пользователей.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.errors-compilation-and-linking">
   <h4 class="title">Ошибки при компиляции и связывании классов</h4>

   <p class="simpara">
    Ошибки, возникающие во время компиляции и связывания классов,
    теперь всегда откладываются и обрабатываются после компиляции или связывания классов.
    Фатальные ошибки, возникающие во время компиляции или связывания классов,
    приводят к немедленной обработке всех отложенных ошибок
    без вызова пользовательских обработчиков ошибок.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.exception-by-userdefined-handler">
   <h4 class="title">Исключения, выбрасываемые пользовательским обработчиком ошибок</h4>

   <p class="simpara">
    Исключения, выбрасываемые пользовательскими обработчиками ошибок при обработке
    ошибок связывания классов, больше не повышаются до уровня фатальных ошибок
    и не препятствуют связыванию.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.attribute-during-compilation">
   <h4 class="title">Ошибка применения атрибута во время компиляции</h4>

   <p class="simpara">
    Применение <code class="code">#[\Attribute]</code> к абстрактному классу, перечислению, интерфейсу или трейту
    вызывает ошибку во время компиляции. Ранее атрибут можно было добавить,
    но при вызове метода <span class="methodname"><a href="reflectionattribute.newinstance.php" class="methodname">ReflectionAttribute::newInstance()</a></span> выдавалась ошибка.
    Ошибку можно отложить с момента компиляции до момента выполнения с помощью нового атрибута
    <code class="code">#[\DelayedTargetValidation]</code>.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.disable-ini-setting">
   <h4 class="title">Директива disable_classes</h4>

   <p class="simpara">
    INI-настройку <a href="ini.core.php#ini.disable-classes" class="link">disable_classes</a> удалили,
    поскольку отключение внутренних классов нарушало работу движка и делало поведение программы непредсказуемым.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.destruct-non-array-values">
   <h4 class="title">Деструктуризация значений кроме массивов</h4>

   <p class="simpara">
    Деструктуризация значений, кроме массивов и <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>,
    конструкцией <code class="literal">[]</code> или функцией <span class="function"><a href="function.list.php" class="function">list()</a></span>
    теперь выдаёт предупреждение.
   </p>

  </div>

  <div class="sect3" id="migration85.incompatible.core.warning-related-to-cast">
   <h4 class="title">Предупреждения, связанные с приведением типов</h4>

   <p class="simpara">
    При преобразовании в целые числа чисел с плавающей точкой или строк, похожих на числа с плавающей точкой,
    теперь выдаётся предупреждение, если значения невозможно представить в виде целого числа.
    Это касается явных и неявных преобразований в целые числа.
   </p>

   <p class="simpara">
    При преобразовании значения NAN в другие типы теперь выдаётся предупреждение.
   </p>

  </div>

 </div>

 <div class="sect2" id="migration85.incompatible.bzip2">
  <h3 class="title">Модуль Bzip2</h3>

  <p class="simpara">
   Функция <span class="function"><a href="function.bzcompress.php" class="function">bzcompress()</a></span> теперь выбрасывает ошибку <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>,
   если значение параметра <code class="parameter">$block_size</code> выходит за пределы диапазона от 1 до 9.
  </p>

  <p class="simpara">
   Функция <span class="function"><a href="function.bzcompress.php" class="function">bzcompress()</a></span> теперь выбрасывает ошибку <span class="classname"><a href="class.valueerror.php" class="classname">ValueError</a></span>,
   если значение параметра <code class="parameter">$work_factor</code> выходит за пределы диапазона от 0 до 250.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.dom">
  <h3 class="title">Модуль DOM</h3>

  <p class="simpara">
   Клонирование объектов <span class="classname"><a href="class.domnamednodemap.php" class="classname">DOMNamedNodeMap</a></span>,
   <span class="classname"><a href="class.domnodelist.php" class="classname">DOMNodeList</a></span>, <span class="classname"><a href="class.dom-namednodemap.php" class="classname">Dom\NamedNodeMap</a></span>,
   <span class="classname"><a href="class.dom-nodelist.php" class="classname">Dom\NodeList</a></span>, <span class="classname"><a href="class.dom-htmlcollection.php" class="classname">Dom\HTMLCollection</a></span>
   и <span class="classname"><a href="class.dom-dtdnamednodemap.php" class="classname">Dom\DtdNamedNodeMap</a></span> теперь выбрасывает ошибку.
   Такое поведение никогда не создавало рабочие объекты,
   поэтому изменение не повлияет на код, который написали на предыдущих версиях языка.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.fileinfo">
  <h3 class="title">Модуль FileInfo</h3>

  <p class="simpara">
   Функция <span class="function"><a href="function.finfo-file.php" class="function">finfo_file()</a></span> и метод <span class="methodname"><a href="finfo.file.php" class="methodname">finfo::file()</a></span>
   теперь выбрасывают ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> вместо
   <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>, если значение параметра <code class="parameter">$filename</code>
   содержит нулевые байты.
   Теперь тип выбрасываемой ошибки соответствует остальной частью языка.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.intl">
  <h3 class="title">Модуль интернационализации</h3>

  <p class="simpara">
   Для работы модуля теперь требуется как минимум ICU 57.1.
  </p>

  <p class="simpara">
   Метод <span class="methodname"><a href="intldateformatter.settimezone.php" class="methodname">IntlDateFormatter::setTimeZone()</a></span> и функция <span class="function"><a href="intldateformatter.settimezone.php" class="function">datefmt_set_timezone()</a></span>
   теперь выбрасывают исключение <span class="exceptionname"><a href="class.intlexception.php" class="exceptionname">IntlException</a></span>
   при неинициализированных классах или ошибках клонирования.
  </p>

  <p class="simpara">
   Все методы класса <span class="classname"><a href="class.locale.php" class="classname">Locale</a></span> теперь выбрасывают исключение
   <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>, если значение параметра locale содержит нулевые байты.
  </p>

  <p class="simpara">
   Поведение константы <strong><code><a href="class.collator.php#collator.constants.sort-regular">Collator::SORT_REGULAR</a></code></strong> при обработке числовых строк
   теперь соответствует поведению <strong><code><a href="array.constants.php#constant.sort-regular">SORT_REGULAR</a></code></strong> в модуле ext/standard.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.ldap">
  <h3 class="title">Модуль LDAP</h3>

  <p class="simpara">
   Функция <span class="function"><a href="function.ldap-get-option.php" class="function">ldap_get_option()</a></span> и <span class="function"><a href="function.ldap-set-option.php" class="function">ldap_set_option()</a></span>
   теперь выбрасывают исключение <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> при передаче недопустимого параметра.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.mbstring">
  <h3 class="title">Модуль MBString</h3>

  <p class="simpara">
   Таблицы данных Unicode были обновлены до версии Unicode 17.0.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.mysqli">
  <h3 class="title">Модуль MySQLi</h3>

  <p class="simpara">
   Вызов конструктора на объекте mysqli
   теперь невозможен и выбрасывает ошибку <span class="exceptionname"><a href="class.error.php" class="exceptionname">Error</a></span>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.odbc">
  <h3 class="title">Модуль ODBC</h3>

  <p class="simpara">
   ODBC теперь предполагает, что доступна как минимум функциональность ODBC 3.5.
   Определение ODBCVER и флаги системы сборки, управляющие им, были удалены.
  </p>

  <p class="simpara">
   ODBC больше не включает флаги сборки для сборки с конкретными драйверами (за исключением DB2)
   и удаляет особые случаи для этих драйверов.
   Настоятельно рекомендуется использовать диспетчер драйверов
   наподобие iODBC или unixODBC на операционных системах кроме Windows.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.opcache">
  <h3 class="title">Модуль Opcache</h3>

  <p class="simpara">
   Модуль Opcache встроили в бинарный файл PHP, поэтому модуль не требует отдельной установки и загружается автоматически.
   INI-директивы <a href="opcache.configuration.php#ini.opcache.enable" class="link">opcache.enable</a> и <a href="opcache.configuration.php#ini.opcache.enable-cli" class="link">opcache.enable_cli</a>
   по-прежнему работают.
  </p>

  <p class="simpara">
   Флаги конфигурации <strong class="option configure">--enable-opcache</strong>/<strong class="option configure">--disable-opcache</strong>
   были удалены и сборка больше не создаёт объекты <var class="filename">opcache.so</var> или <var class="filename">php_opcache.dll</var>.
  </p>

  <p class="simpara">
   INI-директивы <code class="literal">zend_extension=opcache.so</code>
   и <code class="literal">zend_extension=php_opcache.dll</code> теперь выдают предупреждение.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.pcntl">
  <h3 class="title">Модуль PCNTL</h3>

  <p class="simpara">
   Функция <span class="function"><a href="function.pcntl-exec.php" class="function">pcntl_exec()</a></span> теперь выбрасывает ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если элементы параметра <code class="parameter">$args</code> содержат нулевые байты..
  </p>

  <p class="simpara">
   Функция <span class="function"><a href="function.pcntl-exec.php" class="function">pcntl_exec()</a></span> теперь выбрасывает ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если записи или ключи параметра <code class="parameter">$env_vars</code>
   содержат нулевые байты.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.pcre">
  <h3 class="title">Модуль PCRE</h3>

  <p class="simpara">
   Модуль скомпилирован без полуустаревшего параметра
   компиляции PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.pdo">
  <h3 class="title">Модуль PDO</h3>

  <p class="simpara">
   Аргументы, которые передаются в конструктор класса при установке
   режима <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>,
   теперь обрабатываются по правилам стандартной семантики функции <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span>,
   поэтому строковые ключи интерпретируются как именованные аргументы.
   При передаче в параметр, который ожидает аргумент по ссылке, значения, а не переменной,
   аргумент автоматически оборачивался во временную переменную. Это поведение тоже удалили
   и теперь выдаётся стандартное предупреждение <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
   Для передачи в аргументе конструктора переменной по ссылке в массиве переменной по ссылке значение массива
   присваивают по ссылке: <code class="code">$ctor_args = [&amp;$valByRef]</code>.
  </p>

  <p class="simpara">
   При попытке вызова метода <span class="methodname"><a href="pdostatement.setfetchmode.php" class="methodname">PDOStatement::setFetchMode()</a></span>
   в контексте работы методов <span class="methodname"><a href="pdostatement.fetch.php" class="methodname">PDOStatement::fetch()</a></span>,
   <span class="methodname"><a href="pdostatement.fetchobject.php" class="methodname">PDOStatement::fetchObject()</a></span>
   или <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span> — например,
   при передаче объекта запроса в конструктор в режиме извлечения
   данных в объект — теперь выбрасывается ошибка <span class="exceptionname"><a href="class.error.php" class="exceptionname">Error</a></span>.
  </p>

  <p class="simpara">
   Изменились значения констант <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-group">PDO::FETCH_GROUP</a></code></strong>,
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-unique">PDO::FETCH_UNIQUE</a></code></strong>,
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-classtype">PDO::FETCH_CLASSTYPE</a></code></strong>,
   <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-props-late">PDO::FETCH_PROPS_LATE</a></code></strong>
   и <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-serialize">PDO::FETCH_SERIALIZE</a></code></strong>.
  </p>

  <p class="simpara">
   При попытке указать опцию <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-props-late">PDO::FETCH_PROPS_LATE</a></code></strong>
   с несовместимыми режимами извлечения теперь выбрасывается
   ошибка <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>, как и при других несовместимых комбинациях флагов.
   Опция совместима только с режимом <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-class">PDO::FETCH_CLASS</a></code></strong>.
  </p>

  <p class="simpara">
   При попытке выбрать строки
   методом <span class="methodname"><a href="pdostatement.fetchall.php" class="methodname">PDOStatement::fetchAll()</a></span>
   в режиме <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-into">PDO::FETCH_INTO</a></code></strong>
   теперь выбрасывается ошибка <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> —
   как и в режиме выборки <strong><code><a href="pdo.constants.fetch-modes.php#pdo.constants.fetch-lazy">PDO::FETCH_LAZY</a></code></strong>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.pdo-firebird">
  <h3 class="title">Драйвер PDO_FIREBIRD</h3>

  <p class="simpara">
   При попытке установить слишком длинное имя курсора
   в классе <span class="classname"><a href="class.pdostatement.php" class="classname">PDOStatement</a></span>, полученном от драйвера Firebird,
   теперь выбрасывается ошибка <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.pdo-sqlite">
  <h3 class="title">Драйвер PDO_SQLITE</h3>

  <p class="simpara">
   SQLite <span class="methodname"><a href="pdo.quote.php" class="methodname">PDO::quote()</a></span> теперь выбрасывает исключение
   или выдаёт предупреждение, в зависимости от режима ошибок,
   если строка содержит нулевой байт.
  </p>

  <p class="simpara">
   Метод <span class="methodname"><a href="pdo.sqlitecreatecollation.php" class="methodname">PDO::sqliteCreateCollation()</a></span> теперь выбрасывает исключение,
   если у callback-функции неправильный тип возвращаемого значения,
   что повышает совместимость
   с поведением метода <span class="methodname"><a href="pdo-sqlite.createcollation.php" class="methodname">Pdo\Sqlite::createCollation()</a></span>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.posix">
  <h3 class="title">Модуль POSIX</h3>

  <p class="simpara">
   Функция <span class="function"><a href="function.posix-kill.php" class="function">posix_kill()</a></span> теперь выбрасывает
   исключение <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если аргумент process_id меньше или больше, чем поддерживает платформа
   (целое число со знаком или большой диапазон),
   функция <span class="function"><a href="function.posix-setpgid.php" class="function">posix_setpgid()</a></span> теперь выбрасывает
   исключение <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если process_id или process_group_id меньше нуля или больше, чем поддерживает платформа.
  </p>

  <p class="simpara">
   Функция <span class="function"><a href="function.posix-setrlimit.php" class="function">posix_setrlimit()</a></span> теперь выбрасывает
   исключение <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если аргументы hard_limit или soft_limit меньше -1 или если soft_limit больше hard_limit.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.reflection">
  <h3 class="title">Модуль интроспекции кода Reflection</h3>

  <p class="simpara">
   Метод <span class="methodname"><a href="reflectionattribute.newinstance.php" class="methodname">ReflectionAttribute::newInstance()</a></span> теперь
   выбросит ошибку для внутренних атрибутов, если атрибут применили к недопустимой цели,
   а выдачу ошибки отложили с компиляции на момент выполнения
   атрибута #[\DelayedTargetValidation].
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.session">
  <h3 class="title">Модуль Session</h3>

  <p class="simpara">
   Попытка записать данные сессии, где ключ массива <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var> содержит
   символ вертикальной черты (<code class="literal">|</code>),
   теперь выдаёт предупреждение вместо молчаливой ошибки.
  </p>

  <p class="simpara">
   Функция <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> строже относится к аргументу options.
   Функция теперь выбрасывает ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если массив не является хеш-картой, или ошибку <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>,
   если значение read_and_close не является допустимым типом, совместимым с int.
  </p>

  <p class="simpara">
   Передача целочисленного значения <code class="literal">0</code> в аргументе <code class="parameter">locales</code>
   функции <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span> больше не поддерживается и теперь выбрасывает
   ошибку <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.simplexml">
  <h3 class="title">Модуль SimpleXML</h3>

  <p class="simpara">
   Передача выражения XPath, которое возвращает что-либо,
   кроме набора узлов, в методе <span class="methodname"><a href="simplexmlelement.xpath.php" class="methodname">SimpleXMLElement::xpath()</a></span>
   теперь выдаёт предупреждение и возвращает значение <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>,
   вместо того, чтобы молчаливо завершаться с ошибкой и возвращать пустой массив.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.snmp">
  <h3 class="title">Модуль SNMP</h3>

  <p class="simpara">
   Функции <span class="function"><a href="function.snmpget.php" class="function">snmpget()</a></span>,
   <span class="function"><a href="function.snmpset.php" class="function">snmpset()</a></span>,
   <span class="function"><a href="function.snmp2-get.php" class="function">snmp2_get()</a></span>,
   <span class="function"><a href="function.snmp2-set.php" class="function">snmp2_set()</a></span>,
   <span class="function"><a href="function.snmp3-get.php" class="function">snmp3_get()</a></span>,
   <span class="function"><a href="function.snmp3-set.php" class="function">snmp3_set()</a></span>
   и <span class="methodname"><a href="snmp.construct.php" class="methodname">SNMP::__construct()</a></span> теперь выбрасывают ошибку
   <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>, если имя хоста
   слишком большое, содержит нулевые байты или если порт указан
   с отрицательным значением или больше 65535, а значения времени ожидания и повторных попыток
   меньше -1 или слишком большое.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.soap">
  <h3 class="title">Модуль SOAP</h3>

  <p class="simpara">
   Метод <span class="methodname"><a href="soapclient.dorequest.php" class="methodname">SoapClient::__doRequest()</a></span> теперь принимает
   новый необязательный параметр <code class="parameter">$uriParserClass</code>,
   который принимает строковые аргументы или <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
   Значение <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> представляет исходный метод — <span class="function"><a href="function.parse-url.php" class="function">parse_url()</a></span>,
   а новые обработчики устанавливаются при передаче
   либо объекта <span class="classname"><a href="class.uri-rfc3986-uri.php" class="classname">Uri\Rfc3986\Uri</a></span>, либо объекта <span class="classname"><a href="class.uri-whatwg-url.php" class="classname">Uri\WhatWg\Url</a></span>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.sockets">
  <h3 class="title">Модуль Sockets</h3>

  <p class="simpara">
   Функции <span class="function"><a href="function.socket-create-listen.php" class="function">socket_create_listen()</a></span>, <span class="function"><a href="function.socket-bind.php" class="function">socket_bind()</a></span> и <span class="function"><a href="function.socket-sendto.php" class="function">socket_sendto()</a></span>
   теперь выбрасывают ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если порт меньше 0 или больше 65535,
   а также если хотя бы один элемент массива <code class="parameter">$hints</code> содержит числовой индекс.
  </p>

  <p class="simpara">
   Функция <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span> теперь выбрасывает
   ошибку <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>,
   если какое-то значение параметра <code class="parameter">$hints</code> невозможно преобразовать в целое число,
   и ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
   при переполнении значения параметра.
  </p>

  <p class="simpara">
   Функция <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span> с опциями
   <strong><code><a href="sockets.constants.php#constant.mcast-leave-group">MCAST_LEAVE_GROUP</a></code></strong>/<strong><code><a href="sockets.constants.php#constant.mcast-leave-source-group">MCAST_LEAVE_SOURCE_GROUP</a></code></strong>
   теперь выбрасывает исключение, если значение не является корректным объектом или массивом.
  </p>

  <p class="simpara">
   Функция <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span> с контекстом многоадресной рассылки
   теперь выбрасывает ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если созданный сокет не принадлежит семейству
   <strong><code><a href="sockets.constants.php#constant.af-inet">AF_INET</a></code></strong>/<strong><code><a href="sockets.constants.php#constant.af-inet6">AF_INET6</a></code></strong>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.spl">
  <h3 class="title">Модуль SPL</h3>

  <p class="simpara">
   Класс <span class="classname"><a href="class.arrayobject.php" class="classname">ArrayObject</a></span> больше не принимает перечисления,
   поскольку изменение свойства <span class="property">$name</span> или <span class="property">$value</span>
   нарушило бы требование о неизменности перечисления и сделало бы обработку изменённого перечисления движком непредсказуемой или даже невозможной.
  </p>

  <p class="simpara">
   Параметр <code class="parameter">$length</code> метода <span class="methodname"><a href="splfileobject.fwrite.php" class="methodname">SplFileObject::fwrite()</a></span>
   теперь принимает значение <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
   Значение по умолчанию изменилось с <code class="literal">0</code> на <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.standard">
  <h3 class="title">Стандартные модули</h3>

  <p class="simpara">
   Функции семейства printf теперь обрабатывают пропуск спецификатора точности в строке формата
   как точность со значением 0; раньше при пропуске спецификатора точность ошибочно сбрасывалась.
  </p>

 </div>

 <div class="sect2" id="migration85.incompatible.tidy">
  <h3 class="title">Модуль Tidy</h3>

  <p class="simpara">
   Методы <span class="methodname"><a href="tidy.construct.php" class="methodname">tidy::__construct()</a></span>, <span class="methodname"><a href="tidy.parsefile.php" class="methodname">tidy::parseFile()</a></span>,
   <span class="methodname"><a href="tidy.parsestring.php" class="methodname">tidy::parseString()</a></span> теперь выбрасывают ошибку <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если конфигурация содержит некорректное значение или пытается установить внутреннюю запись,
   доступную только для чтения, и ошибку <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>,
   если ключ конфигурации не является строкой.
  </p>

 </div>

</div><?php manual_footer($setup); ?>