<?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 => 'ja',
  ),
  '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' => 'ja',
    '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">ヒアドキュメントと Nowdoc構文 がより柔軟に</h4>

   <p class="para">
    文字列を閉じるマーカーの後に、セミコロンや改行文字を続ける必要はなくなりました。
    それに加えて、文字列を閉じるマーカーはインデントされていても構いません。
    この場合、インデントは文字列の全ての行から取り除かれます。
   </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>
    例外をスローするようになります。
    現状は、この変更は <strong><code><a href="tokenizer.constants.php#constant.token-parse">TOKEN_PARSE</a></code></strong> モードで
    <span class="function"><a href="function.token-get-all.php" class="function">token_get_all()</a></span>
    が実行された場合にスローされる可能性があるコンパイルエラーだけに影響しますが、将来より多くのエラーがこの例外に変換される可能性があります。
   </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">
    configure コマンドに <strong class="option configure">--with-password-argon2[=dir]</strong>
    オプションを与えることで、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>
    を使うことで、パスワードはハッシュ化され、検証されます。
    <span class="function"><strong>password_*()</strong></span> 関数で Argon2i と Argon2id
    のサポートを使うには、PHP を libargon2 ≥
    20161029 とリンクする必要があります。
   </p>
  </div>

 </div>

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

  <p class="para">
   FPM のロギングをカスタマイズするために、新しいオプションが追加されました。
   <dl>
    
     <dt><code class="literal">log_limit</code></dt>
     <dd>
      <span class="simpara">
      このグローバルオプションは、1024文字以上のログを改行なしにロギングするために、ログの長さの限界を設定するために使います。これにより、様々な改行の問題も修正されます。
      </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">
       このプールオプションを使うことで、 <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> 関数は、現在使われている基数を取得する getter
   としても使えるようになりました。
  </p>
 </div>

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

  <p class="para">
   LDAPコントロールの完全なサポートが <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">
      <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> 関数の
      <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>
    </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">完全なケースマッピングとケースフォールディングのサポート</h4>

   <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 />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">// Produces STRAßE on PHP 7.2<br />// Produces STRASSE on PHP 7.3<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">大文字小文字を区別しない文字列操作は、ケースフォールディングを使う</h4>

   <p class="para">
    大文字小文字を区別しない文字列操作は、比較の際にケースマッピングではなく、ケースフォールディング
    を使うようになりました。
    これは、より多くの文字が (大文字小文字を区別しないという意味で) 等価と見做されるようになったことを意味します。
   </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>
    と使うと、Unicodeプロパティ由来の大文字小文字の区別の有無に基づいて、Title-case
    変換を行うようになりました。この変更は特に、クォートやアポストロフィーのハンドリングも改善します。
   </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>
    のデータテーブルは、Unicode 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> は 
    2GB 以上の文字列を正しくサポートするようになりました。
   </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> and <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">
   <code class="literal">completion_append_character</code> と
   <code class="literal">completion_suppress_append</code> オプションのサポートが 
   <span class="function"><a href="function.readline-info.php" class="function">readline_info()</a></span> 関数に追加されました。
   これらのオプションは PHP が (libedit ではなく) libreadline
   とリンクされた場合のみ利用できます。
  </p>
 </div>

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