<?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.new-features.php',
    1 => 'Новые возможности',
    2 => 'Новые возможности',
  ),
  'up' => 
  array (
    0 => 'migration71.php',
    1 => 'Миграция с PHP 7.0.x на PHP 7.1.x',
  ),
  'prev' => 
  array (
    0 => 'migration71.php',
    1 => 'Миграция с PHP 7.0.x на PHP 7.1.x',
  ),
  'next' => 
  array (
    0 => 'migration71.new-functions.php',
    1 => 'Новые функции',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'appendices/migration71/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration71.new-features" class="sect1">
 <h2 class="title">Новые возможности</h2>

 <div class="sect2" id="migration71.new-features.nullable-types">
  <h3 class="title">Обнуляемые типы</h3>

  <p class="para">
   Типы параметров и значений возврата функций стали обнуляемыми.
   Тип становится обнуляемым, если перед названием типа указали вопросительный знак.
   Знак вопроса перед названием типа указывает, что параметр принимает, или функция возвращает,
   значение заданного типа или значение <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </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">testReturnA</span><span style="color: #007700">(): ?</span><span style="color: #0000BB">string<br /></span><span style="color: #007700">{<br />    return </span><span style="color: #DD0000">'elePHPant'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">testReturnA</span><span style="color: #007700">());<br /><br />function </span><span style="color: #0000BB">testReturnB</span><span style="color: #007700">(): ?</span><span style="color: #0000BB">string<br /></span><span style="color: #007700">{<br />    return </span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">testReturnB</span><span style="color: #007700">());<br /><br />function </span><span style="color: #0000BB">test</span><span style="color: #007700">(?</span><span style="color: #0000BB">string $name</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #DD0000">'elePHPant'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">null</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>
string(9) &quot;elePHPant&quot;
NULL
string(9) &quot;elePHPant&quot;
NULL
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in...
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.new-features.void-functions">
  <h3 class="title">Функции без возврата значения</h3>

  <p class="para">
   Для значений возврата добавили тип <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span>. В функциях
   с типом возврата void потребуется либо пропустить инструкцию return,
   либо указать пустую инструкцию return, без значения. Из void-функций
   нельзя возвращать значение <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </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">swap</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$left</span><span style="color: #007700">, &amp;</span><span style="color: #0000BB">$right</span><span style="color: #007700">): </span><span style="color: #0000BB">void<br /></span><span style="color: #007700">{<br />    if (</span><span style="color: #0000BB">$left </span><span style="color: #007700">=== </span><span style="color: #0000BB">$right</span><span style="color: #007700">) {<br />        return;<br />    }<br /><br />    </span><span style="color: #0000BB">$tmp </span><span style="color: #007700">= </span><span style="color: #0000BB">$left</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$left </span><span style="color: #007700">= </span><span style="color: #0000BB">$right</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$right </span><span style="color: #007700">= </span><span style="color: #0000BB">$tmp</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">swap</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">), </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</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>
null
int(2)
int(1)
</pre></div>
   </div>
  </div>

  <p class="para">
   При попытке получить возврат void-функции значение вычисляется как <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, без выдачи предупреждения.
   Причина такого поведения состоит в том, что предупреждения ограничили бы работу общих функций
   высшего порядка с void-функциями.
  </p>
 </div>

 <div class="sect2" id="migration71.new-features.symmetric-array-destructuring">
  <h3 class="title">Симметричная деструктуризация массива</h3>

  <p class="para">
   Короткий синтаксис массивов <code class="literal">[]</code> теперь доступен для деструктуризации массивов
   и присваивания значений, в том числе в циклах <code class="literal">foreach</code>.
   Короткий синтаксис появился как альтернатива
   языковой конструкции <span class="function"><a href="function.list.php" class="function">list()</a></span>, которая по-прежнему поддерживается.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$data </span><span style="color: #007700">= [<br />    [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">'Tom'</span><span style="color: #007700">],<br />    [</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'Fred'</span><span style="color: #007700">],<br />];<br /><br /></span><span style="color: #FF8000">// Деструктуризация массива в стиле языковой конструкции list()<br /></span><span style="color: #007700">list(</span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #0000BB">$name1</span><span style="color: #007700">) = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// Деструктуризация массива в стиле короткого синтаксиса массивов []<br /></span><span style="color: #007700">[</span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #0000BB">$name1</span><span style="color: #007700">] = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// Деструктуризация через list()<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as list(</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">)) {<br />    </span><span style="color: #FF8000">// В этом месте применяем логику работы с переменными $id и $name<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// Деструктуризация через короткий синтаксис []<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as [</span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #0000BB">$name</span><span style="color: #007700">]) {<br />    </span><span style="color: #FF8000">// В этом месте применяем логику работы с переменными $id и $name<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.class-constant-visibility">
  <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 /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">ConstDemo<br /></span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">PUBLIC_CONST_A </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    public const </span><span style="color: #0000BB">PUBLIC_CONST_B </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />    protected const </span><span style="color: #0000BB">PROTECTED_CONST </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br />    private const </span><span style="color: #0000BB">PRIVATE_CONST </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.iterable-pseudo-type">
  <h3 class="title">Псевдотип <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span></h3>

  <p class="para">
   Семейство псевдотипов, к которым также относится тип <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>,
   пополнилось новым псевдотипом с названием <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span>. Новый псевдотип доступен и как тип параметров,
   и как тип значений возврата, которые принимают массивы или объекты,
   которые реализуют интерфейс <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>.
   В вопросах подтипирования, типам параметров дочерних классов доступно расширение
   типа <span class="type"><a href="language.types.array.php" class="type array">array</a></span> или <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> в объявлениях родительского класса
   до типа <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span>. В объявлениях типа возврата дочерним классам разрешается сужать
   тип возврата родительского метода с <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span> до <span class="type"><a href="language.types.array.php" class="type array">array</a></span> или <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>.
  </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">iterator</span><span style="color: #007700">(</span><span style="color: #0000BB">iterable $iter</span><span style="color: #007700">)<br />{<br />    foreach (</span><span style="color: #0000BB">$iter </span><span style="color: #007700">as </span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br />        </span><span style="color: #FF8000">//<br />    </span><span style="color: #007700">}<br />}</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.mulit-catch-exception-handling">
  <h3 class="title">Обработка набора исключений в одном блоке catch</h3>

  <p class="para">
   Блоки catch научились обрабатывать набор исключений, которые
   указывают через символ вертикальной черты <code class="literal">|</code>. Это приносит пользу,
   когда исключения разных иерархий классов требуется обрабатывать одинаково.
  </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">try {<br />    </span><span style="color: #FF8000">// Какой-то код<br /></span><span style="color: #007700">} catch (</span><span style="color: #0000BB">FirstException </span><span style="color: #007700">| </span><span style="color: #0000BB">SecondException $e</span><span style="color: #007700">) {<br />    </span><span style="color: #FF8000">// Обрабатываем одно или другое исключение<br /></span><span style="color: #007700">}</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.support-for-keys-in-list">
  <h3 class="title">Поддержка ключей в языковой конструкции <span class="function"><a href="function.list.php" class="function">list()</a></span></h3>

  <p class="para">
   Языковая конструкция <span class="function"><a href="function.list.php" class="function">list()</a></span> и её новый
   короткий синтаксис <code class="literal">[]</code> теперь поддерживают ключи.
   Это помогает деструктурировать
   массивы с нечисловыми или непоследовательными ключами.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$data </span><span style="color: #007700">= [<br />    [</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Tom'</span><span style="color: #007700">],<br />    [</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Fred'</span><span style="color: #007700">],<br />];<br /><br /></span><span style="color: #FF8000">// Деструктуризация массива в стиле языковой конструкции list()<br /></span><span style="color: #007700">list(</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name1</span><span style="color: #007700">) = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// Деструктуризация массива в стиле короткого синтаксиса массивов []<br /></span><span style="color: #007700">[</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id1</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name1</span><span style="color: #007700">] = </span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// Деструктуризация в стиле list()<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as list(</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name</span><span style="color: #007700">)) {<br />    </span><span style="color: #FF8000">// Применяем логику обработки переменных $id и $name<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// Деструктуризация в стиле короткого синтаксиса []<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$data </span><span style="color: #007700">as [</span><span style="color: #DD0000">"id" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$id</span><span style="color: #007700">, </span><span style="color: #DD0000">"name" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$name</span><span style="color: #007700">]) {<br />    </span><span style="color: #FF8000">// Применяем логику обработки переменных $id и $name<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration71.new-features.support-for-negative-string-offsets">
  <h3 class="title">Поддержка отрицательных смещений в строках</h3>

  <p class="para">
   <a href="book.strings.php" class="link">В функции для работы со строками</a>, которые поддерживают смещения,
   и <a href="language.types.string.php#language.types.string.substr" class="link">в работу с символами строки по индексу</a>
   через короткий синтаксис массива <code class="literal">[]</code> или фигурные скобки <code class="literal">{}</code>
   добавили поддержку отрицательных смещений в строках.
   В функциях и при доступе к символам строки по индексу отрицательные смещения интерпретируются как смещения относительно конца строки.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />var_dump</span><span style="color: #007700">(</span><span style="color: #DD0000">"abcdef"</span><span style="color: #007700">[-</span><span style="color: #0000BB">2</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">strpos</span><span style="color: #007700">(</span><span style="color: #DD0000">"aabbcc"</span><span style="color: #007700">, </span><span style="color: #DD0000">"b"</span><span style="color: #007700">, -</span><span style="color: #0000BB">3</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>
string (1) &quot;e&quot;
int(3)
</pre></div>
   </div>
  </div>

  <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 /><br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Последний символ в строке '</span><span style="color: #0000BB">$string</span><span style="color: #DD0000">' — '</span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000">'.\n"</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>
Последний символ в строке &#039;bar&#039; — &#039;r&#039;.
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.new-features.support-for-aead-in-ext-openssl">
  <h3 class="title">Поддержка режима AEAD в модуле OpenSSL</h3>

  <p class="para">
   За счёт расширения функций <span class="function"><a href="function.openssl-encrypt.php" class="function">openssl_encrypt()</a></span>
   и <span class="function"><a href="function.openssl-decrypt.php" class="function">openssl_decrypt()</a></span> дополнительными параметрами
   добавили поддержку AEAD-режимов GCM и CCM.
  </p>
 </div>

 <div class="sect2" id="migration71.new-features.convert-callables-to-closures">
  <h3 class="title">
   Преобразование значений с типом callable в тип <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span> методом <span class="methodname"><a href="closure.fromcallable.php" class="methodname">Closure::fromCallable()</a></span>
  </h3>

  <p class="para">
   В класс <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span> добавили новый статический метод,
   который легко преобразовывает значения с типом <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> в объекты
   класса <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>.
  </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">class </span><span style="color: #0000BB">Test<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">exposeFunction</span><span style="color: #007700">()<br />    {<br />        return </span><span style="color: #0000BB">Closure</span><span style="color: #007700">::</span><span style="color: #0000BB">fromCallable</span><span style="color: #007700">([</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">'privateFunction'</span><span style="color: #007700">]);<br />    }<br /><br />    private function </span><span style="color: #0000BB">privateFunction</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$privFunc </span><span style="color: #007700">= (new </span><span style="color: #0000BB">Test</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">exposeFunction</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$privFunc</span><span style="color: #007700">(</span><span style="color: #DD0000">'значение'</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>
string(16) &quot;значение&quot;
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.new-features.asynchronous-signal-handling">
  <h3 class="title">Асинхронная обработка сигналов</h3>

  <p class="para">
   Для асинхронной обработки сигналов в ядро PHP добавили функцию <span class="function"><a href="function.pcntl-async-signals.php" class="function">pcntl_async_signals()</a></span>.
   Новая функция не использует механизм тиков, который вызывает избыточные накладные расходы.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />pcntl_async_signals</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">); </span><span style="color: #FF8000">// Включает асинхронные сигналы<br /><br /></span><span style="color: #0000BB">pcntl_signal</span><span style="color: #007700">(</span><span style="color: #0000BB">SIGHUP</span><span style="color: #007700">,  function(</span><span style="color: #0000BB">$sig</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"SIGHUP\n"</span><span style="color: #007700">;<br />});<br /><br /></span><span style="color: #0000BB">posix_kill</span><span style="color: #007700">(</span><span style="color: #0000BB">posix_getpid</span><span style="color: #007700">(), </span><span style="color: #0000BB">SIGHUP</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>
SIGHUP
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.new-features.http2-server-push-support-in-ext-curl">
  <h3 class="title">Поддержка механизма HTTP/2 Server Push в модуле cURL</h3>

  <p class="para">
   В модуль cURL добавили поддержку механизма Server Push. Для работы механизма требуется библиотека cURL версия 7.46 и выше.
   Поддержка заблаговременной отправки данных работает в функции <span class="function"><a href="function.curl-multi-setopt.php" class="function">curl_multi_setopt()</a></span> с новой
   константой <strong><code><a href="curl.constants.php#constant.curlmopt-pushfunction">CURLMOPT_PUSHFUNCTION</a></code></strong>. В модуль также добавили константы
   <strong><code><a href="curl.constants.php#constant.curl-push-ok">CURL_PUSH_OK</a></code></strong> и <strong><code><a href="curl.constants.php#constant.curl-push-deny">CURL_PUSH_DENY</a></code></strong>,
   чтобы одобрить или отклонить выполнение Server Push в клиентской callback-функции.
  </p>
 </div>

  <div class="sect2" id="migration71.new-features.stream-context-options">
  <h3 class="title">Контекстные опции потока</h3>

  <p class="para">
   В контекст потока добавили параметр <a href="context.socket.php#context.socket.tcp_nodelay" class="link">tcp_nodelay</a>.
  </p>
 </div>
</div><?php manual_footer($setup); ?>