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

contributors($setup);

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

 <div class="sect2" id="migration71.incompatible.too-few-arguments-exception">
  <h3 class="title">Вызов исключения при передаче функции недостаточного количества аргументов</h3>

  <p class="para">
   Раньше, если пользовательскую функцию вызывали с недостаточным количеством
   аргументов, выдавалось предупреждение. Теперь вместо предупреждения выбрасываться
   исключение Error. Это изменение затрагивает только пользовательские
   функции и не оказывает влияния на встроенные. Например:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">){}<br /></span><span style="color: #0000BB">test</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   
<p class="para">
 Вывод приведённого примера будет похож на:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in %s on line %d and exactly 1 expected in %s:%d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.forbid-dynamic-calls-to-scope-introspection-functions">
  <h3 class="title">Запрет динамического вызова функций интроспекции области видимости</h3>

  <p class="para">
   Динамические вызовы отдельных функций запретили (в виде
   <code class="literal">$func()</code> или <code class="literal">array_map(&#039;extract&#039;, ...)</code>, и т. д.)
   Эти функции проверяют или модифицируют объекты другой области видимости, чем
   вызывают неоднозначное и неопределённое поведение.
   Список таких функций:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.assert.php" class="function">assert()</a></span> — со строкой в качестве первого аргумента
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.compact.php" class="function">compact()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.extract.php" class="function">extract()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-arg.php" class="function">func_get_arg()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.get-defined-vars.php" class="function">get_defined_vars()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.mb-parse-str.php" class="function">mb_parse_str()</a></span> — с одним аргументом
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.parse-str.php" class="function">parse_str()</a></span> — с одним аргументом
    </span>
   </li>
  </ul>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">(function () {<br />    </span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'func_num_args'</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$func</span><span style="color: #007700">();<br />})();</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
Warning: Cannot call func_num_args() dynamically in %s on line %d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.invalid-class-names">
  <h3 class="title">Некорректные имена классов, интерфейсов и трейтов</h3>

  <p class="para">
   Следующие имена нельзя использовать как имена классов, интерфейсов или трейтов:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara"><span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span></span>
   </li>
   <li class="listitem">
    <span class="simpara"><span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span></span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.numerical-strings-scientific-notation">
  <h3 class="title">Преобразование числовых строк теперь учитывает научную нотацию</h3>

  <p class="para">
   Целочисленные операции и конвертации числовых строк теперь учитывают научную нотацию,
   включая приведение <code class="literal">(int)</code> и следующие функции:
   <span class="function"><a href="function.intval.php" class="function">intval()</a></span> (с базой 10), <span class="function"><a href="function.settype.php" class="function">settype()</a></span>,
   <span class="function"><a href="function.decbin.php" class="function">decbin()</a></span>, <span class="function"><a href="function.decoct.php" class="function">decoct()</a></span> и <span class="function"><a href="function.dechex.php" class="function">dechex()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fixes-to-mt_rand-algorithm">
  <h3 class="title">Исправление алгоритма <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span></h3>

  <p class="para">
   <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> теперь по умолчанию использует зафиксированную версию
   алгоритма &quot;Вихрь Мерсена&quot;. Если вы полагались на детерминированный вывод
   <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>, можно использовать константу <strong><code><a href="random.constants.php#constant.mt-rand-php">MT_RAND_PHP</a></code></strong> в качестве второго,
   необязательного, параметра <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> для сохранения старой (неправильной) реализации.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.rand-srand-aliases">
  <h3 class="title">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> псевдоним для <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> и
   <span class="function"><a href="function.srand.php" class="function">srand()</a></span> псевдоним для <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>
  </h3>

  <p class="para">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> и <span class="function"><a href="function.srand.php" class="function">srand()</a></span> теперь являются просто синонимами
   для <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> и <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>.
   Это означает, что вывод следующих функций изменился: <span class="function"><a href="function.rand.php" class="function">rand()</a></span>,
   <span class="function"><a href="function.shuffle.php" class="function">shuffle()</a></span>, <span class="function"><a href="function.str-shuffle.php" class="function">str_shuffle()</a></span> и
   <span class="function"><a href="function.array-rand.php" class="function">array_rand()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.delete-control-character-in-identifiers">
  <h3 class="title">Запрет использовать символ удаления из таблицы ASCII в идентификаторах</h3>

  <p class="para">
   Символ удаления ASCII (<code class="literal">0x7F</code>) больше нельзя использовать в
   идентификаторах, не обёрнутых в кавычки.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.error_log-syslog">
  <h3 class="title">
   Значение <code class="parameter">error_log</code> изменено на <code class="literal">syslog</code>
  </h3>

  <p class="para">
   Если ini-параметр <code class="parameter">error_log</code> установлен как
   <code class="literal">syslog</code>, то уровни ошибок PHP проецируются на уровни ошибок &quot;syslog&quot;.
   Это позволяет более тонко логировать события, а не как раньше, когда все они
   записывались с уровнем &quot;notice&quot;.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.dont-call-destructors">
  <h3 class="title">Деструкторы не вызываются на незавершённых объектах</h3>

  <p class="para">
   Теперь деструкторы никогда не вызываются, если было вызвано исключение в
   конструкторе объекта. Раньше это поведение зависело от того, была ли ссылка на
   объект вне конструктора (например, в трассировке исключения).
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.call_user_func-with-ref-args">
  <h3 class="title">
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> обрабатывает ссылки на аргументы
  </h3>

  <p class="para">
   Теперь <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> всегда вызывает предупреждение,
   если вызывается функция, ожидающая ссылки в качестве параметров.
   Ранее это зависело от того, был ли вызов полностью определённым.
  </p>
  <p class="para">
   Кроме того, <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> и
   <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span> больше не прекращают выполнение функции в
   этом случае. Предупреждение &quot;expected reference&quot; будет вызвано, но сама функция
   продолжит выполнение.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-index-operator">
  <h3 class="title">
   Оператор пустого индекса более не применим к строкам
  </h3>

  <p class="para">
   Применение оператора пустого индекса к строке (<code class="literal">$str[] = $x</code>)
   вызывает фатальную ошибку вместо тихого преобразования переменной к массиву.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-modifcation-by-character">
  <h3 class="title">Присвоение через механизм доступа к элементу строки по индексу применительно к пустой строке</h3>
  <p class="para">
   Модификация символа в пустой строке  теперь работает так же как и для не пустой.
   Т. е. запись по несуществующему смещению приведёт к преобразованию не целочисленного
   значения смещения к целому числу, дополнению строки до нужной длины символами
   пробела и использованию только первого символа из присваиваемой строки. Раньше,
   в такой ситуации, пустая строка рассматривалась как пустой массив.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">] = </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    
<p class="para">
 Результат выполнения приведённого примера в PHP 7.0:
</p>

    <div class="example-contents screen">
<div class="cdata"><pre>
array(1) {
  [10]=&gt;
  string(3) &quot;foo&quot;
}
</pre></div>
    </div>
    
<p class="para">
 Результат выполнения приведённого примера в PHP 7.1:
</p>

    <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;          f&quot;
</pre></div>
    </div>
   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.removed-ini-directives">
  <h3 class="title">Удалённые ini-директивы</h3>

  <p class="para">
   Следующие ini-директивы были удалены:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_file</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_length</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_function</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_bits_per_character</code>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.array-order">
  <h3 class="title">
   Порядок массива, когда элементы созданы автоматически через присвоение по ссылке, был
   изменён
  </h3>

  <p class="para">
   Порядок расположения элементов массива, создаваемых присвоением по ссылке не созданных
   на момент присвоения элементов, был изменён.
   К примеру:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= [];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"a"</span><span style="color: #007700">] =&amp; </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">] = </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   
<p class="para">
 Результат выполнения приведённого примера в PHP 7.0:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;a&quot;]=&gt;
  &amp;int(1)
  [&quot;b&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
   
<p class="para">
 Результат выполнения приведённого примера в PHP 7.1:
</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;b&quot;]=&gt;
  &amp;int(1)
  [&quot;a&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
  </div>
 </div>
 <div class="sect2" id="migration71.incompatible.sort-order">
  <h3 class="title">Порядок сортировки эквивалентных элементов</h3>
  <p class="para">
   Внутренний алгоритм сортировки был улучшен, что может привести
   к отличию в порядке расположения эквивалентных элементов
   после сортировки по сравнению с предыдущими версиями PHP.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Не полагайтесь на порядок расположения эквивалентных элементов, так как
    он может в любой момент измениться.
   </p>
  </p></blockquote>
 </div>
 <div class="sect2" id="migration71.incompatible.e-recoverable">
  <h3 class="title">Сообщения для ошибок E_RECOVERABLE</h3>
  <p class="para">
   Сообщения для ошибок E_RECOVERABLE изменено с &quot;Catchable
   fatal error&quot; на &quot;Recoverable fatal error&quot;.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.unserialize">
  <h3 class="title">Параметр $options функции unserialize()</h3>
  <p class="para">
   Теперь элемент <code class="literal">allowed_classes</code> параметра $options функции
   <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> строго типизирован, то есть если передать
   значение с типом, отличным от <span class="type"><a href="language.types.array.php" class="type array">array</a></span> и <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>,
   то unserialize() вернёт <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> и вызовет ошибку уровня <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.datetime-microseconds">
  <h3 class="title">Конструктор DateTime использует микросекунды</h3>
  <p class="para">
   Теперь <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> и <span class="classname"><a href="class.datetimeimmutable.php" class="classname">DateTimeImmutable</a></span>
   используют микросекунды при создании с текущим временем, либо в явном виде,
   либо со строкой относительного времени (например, <code class="literal">&quot;first day of next
   month&quot;</code>). Это означает, что сравнение двух подряд созданных экземпляров
   класса скорее будет возвращать <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> нежели <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>:
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">() == new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fatal-errors-to-error-exceptions">
  <h3 class="title">Вызов исключений <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо фатальных ошибок</h3>
  <p class="para">
   Для модуля Date при некорректных данных сериализации классов
   <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> или <span class="classname"><a href="class.dateperiod.php" class="classname">DatePeriod</a></span>,
   или ошибки инициализации часового пояса из сериализованных данных, будет
   выбрасываться исключение <span class="classname"><a href="class.error.php" class="classname">Error</a></span> из методов
   <span class="methodname"><strong>__wakeup()</strong></span> или <span class="methodname"><strong>__set_state()</strong></span>,
   вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   В модуле DBA функции манипулирования данными (такие как
   <span class="function"><a href="function.dba-insert.php" class="function">dba_insert()</a></span>) теперь будут выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова отлавливаемой фатальной ошибки
   если ключ не содержит ровно двух элементов.
  </p>

  <p class="para">
   В модуле DOM некорректная проверка контекста схемы или RelaxNG
   теперь будут выбрасывать исключение <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова
   фатальной ошибки. Аналогичным образом, попытки зарегистрировать класс узла, который не расширяет
   правильный базовый класс, попытки прочитать некорректное свойство или перезаписать
   свойство доступное только для чтения будут выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   В модуле IMAP адрес email длиннее 16385 байт теперь будет выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   Модуль Intl в случае возникновения ошибки вызова родительского конструктора в классе,
   наследующем <span class="classname"><a href="class.collator.php" class="classname">Collator</a></span> до вызова родительских методов
   теперь будет выбрасывать исключение <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова
   фатальной ошибки. Кроме того, клонирование объекта <span class="classname"><a href="class.transliterator.php" class="classname">Transliterator</a></span>
   теперь будет выбрасывать исключение <span class="classname"><a href="class.error.php" class="classname">Error</a></span> в случае возникновения ошибки
   клонирования внутреннего transliterator вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   Модуль LDAP при указании неизвестного типа модификации в
   <span class="function"><strong>ldap_batch_modify()</strong></span> теперь будет выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   В модуле mbstring функции <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> и
   <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> теперь будут выбрасывать исключение
   <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> в случае некорректного регулярного выражения
   либо в случае использования опции &#039;e&#039;.
  </p>

  <p class="para">
   В модуле Mcrypt <span class="function"><a href="function.mcrypt-encrypt.php" class="function">mcrypt_encrypt()</a></span> и
   <span class="function"><a href="function.mcrypt-decrypt.php" class="function">mcrypt_decrypt()</a></span> теперь будет выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки, если mcrypt
   не инициализирован.
  </p>

  <p class="para">
   В модуле mysqli попытки прочитать некорректное свойство или перезаписать
   свойство доступное только для чтения будут выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   В модуле Reflection неудачное извлечение отражённого объекта или свойства объекта
   будут выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   В модуле сессий пользовательские обработчики сессии, которые не возвращают строку
   для идентификатора сессии, будут выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки, когда будет
   вызвана функция для генерации идентификатора.
  </p>

  <p class="para">
   В модуле SimpleXML попытка создания безымянного либо дублирующего атрибута
   будет выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   В модуле SPL попытка клонировать объект
   <span class="classname"><strong class="classname">SplDirectory</strong></span> будет выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки. Аналогично,
   вызов <span class="methodname"><a href="arrayiterator.append.php" class="methodname">ArrayIterator::append()</a></span> когда итерация объекта
   закончена будет выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   Функция <span class="function"><a href="function.assert.php" class="function">assert()</a></span>, когда ей передан строковый аргумент
   первым параметром, теперь будет выбрасывать исключение
   <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> вместо вызова отлавливаемой фатальной ошибки,
   если PHP-код некорректен. Аналогично, вызов <span class="function"><a href="function.forward-static-call.php" class="function">forward_static_call()</a></span> за
   пределами пространства класса будет выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   В модуле Tidy ручное создание <span class="classname"><a href="class.tidynode.php" class="classname">tidyNode</a></span> будет выбрасывать
   исключение <span class="classname"><a href="class.error.php" class="classname">Error</a></span>.
  </p>

  <p class="para">
   В модуле WDDX циклические ссылки при сериализации будут выбрасывать исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   В модуле XML-RPC циклические ссылки при сериализации будут выбрасывать
   исключение
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова фатальной ошибки.
  </p>

  <p class="para">
   В модуле Zip метод <span class="methodname"><a href="ziparchive.addglob.php" class="methodname">ZipArchive::addGlob()</a></span>
   будет выбрасывать исключение <span class="classname"><a href="class.error.php" class="classname">Error</a></span> вместо вызова
   фатальной ошибки, если отсутствует поддержка glob.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.lexical-names">
  <h3 class="title">Лексически связанные переменные не могут переиспользовать имена</h3>

  <p class="para">
   Переменные, привязанные к <a href="functions.anonymous.php" class="link">замыканию</a>
   через конструкцию <code class="literal">use</code>, не могут использовать те же имена, что и
   любые <a href="language.variables.predefined.php" class="link">superglobals</a>, <var class="varname">$this</var> или параметры. К примеру,
   все приведённые функции вызовут фатальную ошибку:
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$this</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) {};</span></span></code></div>
    </div>

   </div>
  </p>
 </div>
 <div class="sect2" id="migration71.incompatible.long2ip">
  <h3 class="title">Изменён тип параметра long2ip()</h3>
  <p class="para">
   Теперь <span class="function"><a href="function.long2ip.php" class="function">long2ip()</a></span> ожидает параметр типа <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> а не
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.json">
  <h3 class="title">Кодирование и декодирование JSON</h3>
  <p class="para">
   INI-настройка <code class="parameter">serialize_precision</code> определяет точность сериализации
   при кодировании значений типа <span class="type"><a href="language.types.float.php" class="type float">float</a></span>.
  </p>
  <p class="para">
   Теперь декодирование пустого ключа приводит к появлению свойства с пустым именем,
   раньше имя свойства приводилось к значению <code class="literal">_empty_</code>.

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">json_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">json_encode</span><span style="color: #007700">([</span><span style="color: #DD0000">'' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">])));</span></span></code></div>
    </div>

    
<p class="para">
 Вывод приведённого примера будет похож на:
</p>

    <div class="example-contents screen">
<div class="cdata"><pre>
object(stdClass)#1 (1) {
  [&quot;&quot;]=&gt;
  int(1)
}
</pre></div>
    </div>
   </div>
  </p>
  <p class="para">
   При передаче флага <strong><code><a href="json.constants.php#constant.json-unescaped-unicode">JSON_UNESCAPED_UNICODE</a></code></strong> в функцию
   <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span> последовательности U+2028 и U+2029 будут экранированы.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.mbstring">
  <h3 class="title">
   Изменение в семантике параметров <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> и <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span>
  </h3>
  <p class="para">
   Третий параметр функций <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> и
   <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span>  (<code class="parameter">regs</code>) теперь устанавливается
   равным пустому массиву, если не было найдено совпадений. Ранее параметр
   оставался неизменным.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.openssl">
  <h3 class="title">Удалена поддержка потока sslv2</h3>
  <p class="para">
   Поддержка потока sslv2 в OpenSSL удалена.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.typed-returns-compile-time">
  <h3 class="title">Запрещён &quot;return;&quot; для типизированных возвратов уже во время компиляции</h3>
  <p class="para">
   Операторы возврата без аргументов в функциях, которые объявляют тип возвращаемого значения,
   теперь вызывают <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong> (если тип возврата не
   объявлен как <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span>), даже если оператор возврата никогда
   не будет достигнут.
  </p>
 </div>
</div><?php manual_footer($setup); ?>