<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration73.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'migration73.new-features.php',
    1 => 'Новые возможности',
    2 => 'Новые возможности',
  ),
  'up' => 
  array (
    0 => 'migration73.php',
    1 => 'Миграция с PHP 7.2.x на PHP 7.3.x',
  ),
  'prev' => 
  array (
    0 => 'migration73.php',
    1 => 'Миграция с PHP 7.2.x на PHP 7.3.x',
  ),
  'next' => 
  array (
    0 => 'migration73.new-functions.php',
    1 => 'Новые функции',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'appendices/migration73/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

 <div class="sect2" id="migration73.new-features.core">
  <h3 class="title">Ядро PHP</h3>

  <div class="sect3" id="migration73.new-features.core.heredoc">
   <h4 class="title">Более гибкий синтаксис Heredoc и Nowdoc</h4>

   <p class="para">
    После закрывающего идентификатора в doc-строках больше не нужно ставить точку с запятой или новую строку.
    Кроме того, закрывающий идентификатор может быть с отступом, и в этом случае он будет удалён из всех строк в doc-строке.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.core.destruct-reference">
   <h4 class="title">Деструктурирование массива поддерживает присвоение по ссылкам</h4>

   <p class="para">
    Деструктурирование массива теперь поддерживает присвоение по ссылкам с помощью синтаксиса
    <code class="literal">[&amp;$a, [$b, &amp;$c]] = $d</code>. То же самое поддерживается и для <span class="function"><a href="function.list.php" class="function">list()</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.core.instanceof-literals">
   <h4 class="title">Оператор instanceof принимает литералы</h4>

   <p class="para">
    Оператор <code class="literal">instanceof</code> теперь поддерживает литералы в качестве первого операнда,
    и в этом случае результат будет всегда <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.core.compileerror">
   <h4 class="title">Исключение CompileError вместо некоторых ошибок компиляции</h4>

   <p class="para">
    Добавлено новое исключение <span class="classname"><a href="class.compileerror.php" class="classname">CompileError</a></span>, которое наследуется от <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>.
    Небольшое количество ошибок компиляции теперь будет выбрасывать <span class="classname"><a href="class.compileerror.php" class="classname">CompileError</a></span> вместо создания фатальной ошибки.
    В настоящее время это влияет только на ошибки компиляции, которые могут быть созданы <span class="function"><a href="function.token-get-all.php" class="function">token_get_all()</a></span>
    в режиме <strong><code><a href="tokenizer.constants.php#constant.token-parse">TOKEN_PARSE</a></code></strong>, но в будущем может быть преобразовано больше ошибок.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.core.trailing-commas">
   <h4 class="title">В вызовах разрешена завершающая запятая</h4>

   <p class="para">
    Завершающие запятые в вызовах функций и методов теперь разрешены.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.core.argon2id">
   <h4 class="title">Поддержка Argon2id</h4>

   <p class="para">
    С аргументом <strong class="option configure">--with-password-argon2[=dir]</strong> скрипта configure
    теперь поддерживаются оба хеша, как Argon2i, так и Argon2id, в функциях
    <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span>, <span class="function"><a href="function.password-verify.php" class="function">password_verify()</a></span>,
    <span class="function"><a href="function.password-get-info.php" class="function">password_get_info()</a></span> и
    <span class="function"><a href="function.password-needs-rehash.php" class="function">password_needs_rehash()</a></span>. Пароли могут быть хешированы
    и проверены, используя константу <strong><code><a href="password.constants.php#constant.password-argon2id">PASSWORD_ARGON2ID</a></code></strong>.
    Поддержка обоих алгоритмов Argon2i и Argon2id в функциях семейства <span class="function"><strong>password_*()</strong></span>
    теперь требует, чтобы PHP был скомпилирован с библиотекой libargon2 версии ≥
    20161029.
   </p>
  </div>

 </div>

 <div class="sect2" id="migration73.new-features.fpm">
  <h3 class="title">Менеджер процессов FastCGI</h3>

  <p class="para">
   Для настройки логирования FPM были добавлены новые опции:
   <dl>
    
     <dt><code class="literal">log_limit</code></dt>
     <dd>
      <span class="simpara">
       Эта глобальная опция может использоваться для установки лимита логирования для строки логирования,
       позволяющая записывать сообщения длиной более 1024 символов без переноса.
       Также исправляет различные проблемы с упаковкой (wrapping).
      </span>
     </dd>
    
    
     <dt><code class="literal">log_buffering</code></dt>
     <dd>
      <span class="simpara">
       Этот глобальная опция позволяет вести экспериментальное логирование без дополнительной буферизации.
      </span>
     </dd>
    
    
     <dt><code class="literal">decorate_workers_output</code></dt>
     <dd>
      <span class="simpara">
       Этот вариант пула позволяет отключить отметку вывода (output decoration) для обработчиков,
       когда <code class="literal">catch_workers_output</code> включена.
      </span>
     </dd>
    
   </dl>
  </p>
 </div>

 <div class="sect2" id="migration73.new-features.bc">
  <h3 class="title">Функции BC Math</h3>

  <p class="para">
   Функция <span class="function"><a href="function.bcscale.php" class="function">bcscale()</a></span> теперь также может использоваться как геттер
   для извлечения текущего используемого масштаба.
  </p>
 </div>

 <div class="sect2" id="migration73.new-features.ldap">
  <h3 class="title">Облегчённый протокол доступа к каталогам (LDAP)</h3>

  <p class="para">
   Была добавлена полная поддержка LDAP Controls к функциям запросов <a href="book.ldap.php" class="link">LDAP</a> и
   <span class="function"><a href="function.ldap-parse-result.php" class="function">ldap_parse_result()</a></span>:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Добавлен параметр <code class="literal">$controls</code> для отправки управления серверу
      в функциях <span class="function"><a href="function.ldap-add.php" class="function">ldap_add()</a></span>,
      <span class="function"><a href="function.ldap-mod-replace.php" class="function">ldap_mod_replace()</a></span>, <span class="function"><a href="function.ldap-mod-add.php" class="function">ldap_mod_add()</a></span>,
      <span class="function"><a href="function.ldap-mod-del.php" class="function">ldap_mod_del()</a></span>, <span class="function"><a href="function.ldap-rename.php" class="function">ldap_rename()</a></span>,
      <span class="function"><a href="function.ldap-compare.php" class="function">ldap_compare()</a></span>, <span class="function"><a href="function.ldap-delete.php" class="function">ldap_delete()</a></span>,
      <span class="function"><a href="function.ldap-modify-batch.php" class="function">ldap_modify_batch()</a></span>,
      <span class="function"><a href="function.ldap-search.php" class="function">ldap_search()</a></span>, <span class="function"><a href="function.ldap-list.php" class="function">ldap_list()</a></span>
      и <span class="function"><a href="function.ldap-read.php" class="function">ldap_read()</a></span>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Добавлен параметр <code class="literal">$controls</code> для получения управления с сервера
      в функции <span class="function"><a href="function.ldap-parse-result.php" class="function">ldap_parse_result()</a></span>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Поддержка <strong><code><a href="ldap.constants.php#constant.ldap-opt-server-controls">LDAP_OPT_SERVER_CONTROLS</a></code></strong> и
      <strong><code><a href="ldap.constants.php#constant.ldap-opt-client-controls">LDAP_OPT_CLIENT_CONTROLS</a></code></strong> в функциях
      <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>
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration73.new-features.mbstring">
  <h3 class="title">Функции мультибайтовых строк</h3>

  <div class="sect3" id="migration73.new-features.mbstring.case-mapping-folding">
   <h4 class="title">Полная поддержка case-mapping и case-folding</h4>

   <p class="para">
    Добавили поддержку полного сопоставления регистра символов (англ. case-mapping)
    и преобразования регистра из нижнего в верхний и наоборот (англ. case-folding).
    В отличие от простого сопоставления регистра, полное сопоставление регистра иногда изменяет длину строки.
    Пример:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />mb_strtoupper</span><span style="color: #007700">(</span><span style="color: #DD0000">"Straße"</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Выведет STRAßE в PHP 7.2<br />// Выведет STRASSE в PHP 7.3<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Различные режимы преобразования и сравнения регистра символов доступны
    в функции <span class="function"><a href="function.mb-convert-case.php" class="function">mb_convert_case()</a></span>:
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-lower">MB_CASE_LOWER</a></code></strong> (используется <span class="function"><a href="function.mb-strtolower.php" class="function">mb_strtolower()</a></span>)
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-upper">MB_CASE_UPPER</a></code></strong> (используется <span class="function"><a href="function.mb-strtoupper.php" class="function">mb_strtoupper()</a></span>)
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-title">MB_CASE_TITLE</a></code></strong>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-fold">MB_CASE_FOLD</a></code></strong>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-lower-simple">MB_CASE_LOWER_SIMPLE</a></code></strong>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-upper-simple">MB_CASE_UPPER_SIMPLE</a></code></strong>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-title-simple">MB_CASE_TITLE_SIMPLE</a></code></strong>
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       <strong><code><a href="mbstring.constants.php#constant.mb-case-fold-simple">MB_CASE_FOLD_SIMPLE</a></code></strong> (используется нечувствительными к регистру операциями)
      </span>
     </li>
    </ul>
    Выполняет только безусловный, независимый от языка, полный процесс преобразования.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.mbstring.case-insensitive-ops">
   <h4 class="title">Операции, нечувствительные к регистру используют case-folding</h4>

   <p class="para">
    Строковые операции без учёта регистра теперь используют case-folding вместо case-mapping регистра при сравнении.
    Это означает, что теперь больше символов будут считаться (без учёта регистра) равными.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.mbstring.mb-case-title">
   <h4 class="title">MB_CASE_TITLE выполняет преобразование title-case</h4>

   <p class="para">
    Функция <span class="function"><a href="function.mb-convert-case.php" class="function">mb_convert_case()</a></span> с <strong><code><a href="mbstring.constants.php#constant.mb-case-title">MB_CASE_TITLE</a></code></strong> теперь выполняет преобразование title-case
    в зависимости от свойств Unicode, основанных на Cased и CaseIgnorable.
    В частности, это также улучшает обработку кавычек и апострофов.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.mbstring.ucd11">
   <h4 class="title">Поддержка Unicode 11</h4>

   <p class="para">
    Таблицы данных <a href="book.mbstring.php" class="link">мультибайтовых строк</a> были
    обновлены до Юникода версии 11.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.mbstring.long-strings">
   <h4 class="title">Поддержка больших строк</h4>

   <p class="para">
    <a href="ref.mbstring.php" class="link">Функции мультибайтовых строк</a> теперь
    корректно поддерживают строки размером более 2 Гб.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.mbstring.performance">
   <h4 class="title">Улучшение производительности</h4>

   <p class="para">
    Производительность модуля <a href="book.mbstring.php" class="link">мультибайтовых строк</a>
    была значительно повсеместно улучшена. Самые большие улучшения в функциях
    преобразования регистра.
   </p>
  </div>

  <div class="sect3" id="migration73.new-features.mbstring.named-captures">
   <h4 class="title">Поддержка именованных фрагментов</h4>

   <p class="para">
    Функции <code class="literal">mb_ereg_*</code> теперь поддерживают именованные фрагменты.
    Соответствующие функции, такие как <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span>, теперь будут
    возвращать именованные фрагменты как с их номером группы, так и с их именем, аналогично PCRE:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />mb_ereg</span><span style="color: #007700">(</span><span style="color: #DD0000">'(?&lt;word&gt;\w+)'</span><span style="color: #007700">, </span><span style="color: #DD0000">'国'</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// =&gt; [0 =&gt; "国", 1 =&gt; "国", "word" =&gt; "国"];<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Кроме того, функция <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span> теперь поддерживает
    обозначения <code class="code">\k&lt;&gt;</code> и <code class="code">\k&#039;&#039;</code> для ссылки на именованные
    фрагменты в заменяющей строке:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />mb_ereg_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">'\s*(?&lt;word&gt;\w+)\s*'</span><span style="color: #007700">, </span><span style="color: #DD0000">"_\k&lt;word&gt;_\k'word'_"</span><span style="color: #007700">, </span><span style="color: #DD0000">' foo '</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// =&gt; "_foo_foo_"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <code class="code">\k&lt;&gt;</code> и <code class="code">\k&#039;&#039;</code> также могут использоваться
    для нумерованных ссылок, которые также работают с номерами групп больше 9.
   </p>
  </div>

 </div>

 <div class="sect2" id="migration73.new-features.realine">
  <h3 class="title">Readline</h3>

  <p class="para">
   В функции <span class="function"><a href="function.readline-info.php" class="function">readline_info()</a></span> добавлена поддержка параметров
   <code class="literal">completion_append_character</code> и <code class="literal">completion_suppress_append</code>.
   Эти опции доступны, только если PHP скомпилирован с библиотекой libreadline (а не libedit).
  </p>
 </div>

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