<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration84.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'migration84.new-features.php',
    1 => '新機能',
    2 => '新機能',
  ),
  'up' => 
  array (
    0 => 'migration84.php',
    1 => 'PHP 8.3.x から PHP 8.4.x への移行',
  ),
  'prev' => 
  array (
    0 => 'migration84.php',
    1 => 'PHP 8.3.x から PHP 8.4.x への移行',
  ),
  'next' => 
  array (
    0 => 'migration84.new-classes.php',
    1 => '新しいクラス、列挙型、インターフェイス',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'appendices/migration84/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration84.new-features" class="sect1">
 <h2 class="title">新機能</h2>

 
 <div class="sect2" id="migration84.new-features.core">
  <h3 class="title">PHP コア</h3>

  
  <div class="sect3" id="migration84.new-features.core.property-hooks">
   <h4 class="title">プロパティフック</h4>

   <p class="simpara">
    オブジェクトのプロパティは、
    <code class="literal">get</code> および <code class="literal">set</code> 操作に
    追加のロジックを関連付けることができるようになりました。
    使用方法に応じてそのプロパティは、値を持つ場合もありますし、
    仮想的、つまり値を持たない場合もあります。
   </p>

   <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">class </span><span style="color: #0000BB">Person<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// 「仮想」プロパティ。明示的に設定されることはありません。<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $fullName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">get </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName </span><span style="color: #007700">. </span><span style="color: #DD0000">' ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName</span><span style="color: #007700">;<br />    }<br /><br />    </span><span style="color: #FF8000">// すべての書き込み操作はこのフックを通り、返却値が書き込まれます。<br />    // 読み取りアクセスは通常通り行われます。<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $firstName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">set </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">ucfirst</span><span style="color: #007700">(</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">));<br />    }<br /><br />    </span><span style="color: #FF8000">// すべての書き込み操作はこのフックを通り、フックの中で値が書き込まれます。<br />    // 読み取りアクセスは通常通り行われます。<br />    </span><span style="color: #007700">public </span><span style="color: #0000BB">string $lastName </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">set </span><span style="color: #007700">{<br />            if (</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">) &lt; </span><span style="color: #0000BB">2</span><span style="color: #007700">) {<br />                throw new </span><span style="color: #0000BB">\InvalidArgumentException</span><span style="color: #007700">(</span><span style="color: #DD0000">'Too short'</span><span style="color: #007700">);<br />            }<br />            </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName </span><span style="color: #007700">= </span><span style="color: #0000BB">$value</span><span style="color: #007700">;<br />        }<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">Person</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName </span><span style="color: #007700">= </span><span style="color: #DD0000">'peter'</span><span style="color: #007700">;<br />print </span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">firstName</span><span style="color: #007700">; </span><span style="color: #FF8000">// Prints "Peter"<br /></span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">lastName </span><span style="color: #007700">= </span><span style="color: #DD0000">'Peterson'</span><span style="color: #007700">;<br />print </span><span style="color: #0000BB">$p</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fullName</span><span style="color: #007700">; </span><span style="color: #FF8000">// Prints "Peter Peterson"</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.asymmetric-property-visibility">
   <h4 class="title">非対称可視性プロパティ</h4>

   <p class="simpara">
    オブジェクトのプロパティは、<code class="literal">set</code> のアクセス権を <code class="literal">get</code> のアクセス権とは別に制御できるようになりました。
   </p>
   <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">class </span><span style="color: #0000BB">Example<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// 最初のアクセス権の修飾子は get 時のアクセス権を制御し、2つ目の修飾子は set 時のアクセス件を制御します。<br />    // 取得時のアクセス権は設定時のそれよりも狭くなってはいけません。<br />    </span><span style="color: #007700">public protected(</span><span style="color: #0000BB">set</span><span style="color: #007700">) </span><span style="color: #0000BB">string $name</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">string $name</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br />    }<br />}</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.lazy-objects">
   <h4 class="title">レイジーオブジェクト</h4>
   <p class="simpara">
    アクセスされるまで初期化が延期されるオブジェクトを作成できるようになりました。
    ライブラリやフレームワークは、これらのレイジーオブジェクトを利用して、
    初期化に必要なデータや依存関係の取得を遅延させることができます。
   </p>
   <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">class </span><span style="color: #0000BB">Example<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(private </span><span style="color: #0000BB">int $data</span><span style="color: #007700">)<br />    {<br />    }<br /><br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">$initializer </span><span style="color: #007700">= static function (</span><span style="color: #0000BB">Example $ghost</span><span style="color: #007700">): </span><span style="color: #0000BB">void </span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Fetch data or dependencies<br />    </span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">getData</span><span style="color: #007700">();<br />    </span><span style="color: #FF8000">// Initialize<br />    </span><span style="color: #0000BB">$ghost</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);<br />};<br /><br /></span><span style="color: #0000BB">$reflector </span><span style="color: #007700">= new </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Example</span><span style="color: #007700">::class);<br /></span><span style="color: #0000BB">$object </span><span style="color: #007700">= </span><span style="color: #0000BB">$reflector</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">newLazyGhost</span><span style="color: #007700">(</span><span style="color: #0000BB">$initializer</span><span style="color: #007700">);</span></span></code></div>
    </div>

   </div>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.deprecated-attribute">
   <h4 class="title"><code class="code">#[\Deprecated]</code> アトリビュート</h4>

   <p class="simpara">
    新しい <span class="classname"><a href="class.deprecated.php" class="classname">Deprecated</a></span> 属性を使用して、関数、メソッド、
    およびクラス定数を非推奨としてマークできます。このアトリビュートで非推奨となった機能の動作は、
    PHP 自身が提供する既存の非推奨メカニズムの動作と一致します。
    唯一の例外は、発生するエラーコードが
    <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong> ではなく <strong><code><a href="errorfunc.constants.php#constant.e-user-deprecated">E_USER_DEPRECATED</a></code></strong> であることです。
   </p>

   <p class="simpara">
    PHP 自身が提供する機能の既存の非推奨は、この属性を使用するように更新され、
    短い説明を含むことでエラーメッセージが改善されました。
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.rfc1867">
   <h4 class="title">POST 以外の HTTP リクエストでの RFC1867 (マルチパート)リクエストの解析</h4>

   
   <p class="simpara">
    POST 以外の HTTP リクエストで RFC1867（マルチパート）リクエストを解析するための
    <span class="function"><a href="function.request-parse-body.php" class="function">request_parse_body()</a></span> 関数が追加されました。
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.new-chaining">
   <h4 class="title">括弧なしでの <a href="language.oop5.basic.php#language.oop5.basic.new" class="link"><code class="literal">new</code></a> 式のチェーン</h4>

   
   <p class="simpara">
    コンストラクタ引数を持つ <a href="language.oop5.basic.php#language.oop5.basic.new" class="link"><code class="literal">new</code></a> 式は直接参照できるようになり、
    式を括弧で囲むことなくメソッド呼び出しや
    プロパティアクセスなどのチェーンが可能になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.new-features.core.debug-weakref">
   <h4 class="title"><span class="classname"><a href="class.weakreference.php" class="classname">WeakReference</a></span> のデバッグ情報の改善</h4>

   
   <p class="simpara">
    <span class="classname"><a href="class.weakreference.php" class="classname">WeakReference</a></span> のデバッグ情報を取得すると、
    参照しているオブジェクト、または参照が無効になっている場合は
    <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> が出力されるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.new-features.core.debug-closure">
   <h4 class="title"><span class="classname"><a href="class.closure.php" class="classname">Closure</a></span> のデバッグ情報の改善</h4>

   
   <p class="simpara">
    <span class="methodname"><strong>Closure::__debugInfo()</strong></span> の出力には、
    <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span> の名前、ファイル名、および行が含まれるようになりました。
   </p>
  </div>

  
  <div class="sect3" id="migration84.new-features.core.multiple-namespaces-symbols">
   <h4 class="title">異なる名前空間ブロックで同一のシンボルを定義</h4>

   
   <p class="simpara">
    名前空間を終了すると、そこで定義されたシンボルがクリアされるようになりました。
    これにより、以前の名前空間ブロックで同じ名前のシンボルが宣言されていても、
    名前空間ブロック内でシンボルを使用できるようになりました。
    
   </p>
  </div>

 </div>

 <div class="sect2" id="migration84.new-features.curl">
  <h3 class="title">cURL</h3>

  <p class="simpara">
   <span class="function"><a href="function.curl-version.php" class="function">curl_version()</a></span> は、新たに
   <code class="literal">feature_list</code> 値を返すようになりました。これは、
   既知のすべての cURL 機能と、それらがサポートされているか(<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>)されていないか
   (<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>)を示す連想配列です。
  </p>

  <p class="simpara">
   <strong><code><a href="curl.constants.php#constant.curlopt-http-version">CURLOPT_HTTP_VERSION</a></code></strong> のオプションとして、
   <strong><code><a href="curl.constants.php#constant.curl-http-version-3">CURL_HTTP_VERSION_3</a></code></strong> および
   <strong><code><a href="curl.constants.php#constant.curl-http-version-3only">CURL_HTTP_VERSION_3ONLY</a></code></strong> 定数
   （libcurl 7.66 および 7.88 から利用可能）
   が追加されました。
  </p>

  <p class="simpara">
   cURL オプションとして<strong><code><a href="curl.constants.php#constant.curlopt-prereqfunction">CURLOPT_PREREQFUNCTION</a></code></strong> が追加されました。
   接続が確立された後、リクエストが送信される前に呼び出される
   <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> を受け入れます。
   この callable は、リクエストを許可または中止するために <strong><code><a href="curl.constants.php#constant.curl-prereqfunc-ok">CURL_PREREQFUNC_OK</a></code></strong> または
   <strong><code><a href="curl.constants.php#constant.curl-prereqfunc-abort">CURL_PREREQFUNC_ABORT</a></code></strong> のいずれかを返す必要があります。
  </p>

  <p class="simpara">
   <strong><code><a href="curl.constants.php#constant.curlopt-server-response-timeout">CURLOPT_SERVER_RESPONSE_TIMEOUT</a></code></strong> が追加されました。
   これは以前は <strong><code><a href="curl.constants.php#constant.curlopt-ftp-response-timeout">CURLOPT_FTP_RESPONSE_TIMEOUT</a></code></strong> として知られていました。
   両方の定数は同じ値を持ちます。
  </p>

  <p class="para">
   cURL オプションとして <strong><code><a href="curl.constants.php#constant.curlopt-debugfunction">CURLOPT_DEBUGFUNCTION</a></code></strong> が追加されました。
   リクエストの実行中に呼び出される <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> を受け入れます。
   この callable は、<span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span> オブジェクト、
   デバッグメッセージの種類を含む整数、
   およびデバッグメッセージを含む文字列を受け取ります。
   デバッグメッセージの種類は、次の定数のいずれかです:
   <ul class="simplelist">
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-text">CURLINFO_TEXT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-header-in">CURLINFO_HEADER_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-header-out">CURLINFO_HEADER_OUT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-data-in">CURLINFO_DATA_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-data-out">CURLINFO_DATA_OUT</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-ssl-data-in">CURLINFO_SSL_DATA_IN</a></code></strong></li>
    <li><strong><code><a href="curl.constants.php#constant.curlinfo-ssl-data-out">CURLINFO_SSL_DATA_OUT</a></code></strong></li>
   </ul>
   このオプションを設定した場合、<strong><code><a href="curl.constants.php#constant.curlinfo-header-out">CURLINFO_HEADER_OUT</a></code></strong> を設定してはいけません。
   同じ libcurl の機能を使用するためです。
  </p>

  <p class="simpara">
   <span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span> は、新たに
   <code class="literal">posttransfer_time_us</code> キーを返すようになりました。
   これは、開始から最後のバイトが送信されるまでのマイクロ秒数を示します。
   リダイレクトが行われた場合、各リクエストの時間が合計されます。
   この値は、<span class="function"><a href="function.curl-getinfo.php" class="function">curl_getinfo()</a></span> の
   <code class="parameter">option</code> パラメータに
   <strong><code><a href="curl.constants.php#constant.curlinfo-posttransfer-time-t">CURLINFO_POSTTRANSFER_TIME_T</a></code></strong> を渡すことでも取得できます。
   libcurl 8.10.0 以降が必要です。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.dom">
  <h3 class="title">DOM</h3>

  
  
  <p class="simpara">
   <span class="package">Dom</span> 名前空間と、既存の DOM クラスに対応する
   新たなクラスが追加されました(例: <span class="classname"><a href="class.dom-node.php" class="classname">Dom\Node</a></span> は
   <span class="classname"><a href="class.domnode.php" class="classname">DOMNode</a></span> に対応する新しいクラスです)。
   これらのクラスは HTML 5 に対応しており、WHATWG の仕様に準拠しています。
   これは DOM 拡張の長年のバグを解決します。
   従来の DOM クラスも後方互換性のために引き続き利用可能です。
  </p>

  <p class="para">
   <span class="methodname"><a href="domnode.comparedocumentposition.php" class="methodname">DOMNode::compareDocumentPosition()</a></span>
   と関連する定数が追加されました:
   <ul class="simplelist">
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-disconnected">DOMNode::DOCUMENT_POSITION_DISCONNECTED</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-preceding">DOMNode::DOCUMENT_POSITION_PRECEDING</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-following">DOMNode::DOCUMENT_POSITION_FOLLOWING</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-contains">DOMNode::DOCUMENT_POSITION_CONTAINS</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-contained-by">DOMNode::DOCUMENT_POSITION_CONTAINED_BY</a></code></strong></li>
    <li><strong><code><a href="class.domnode.php#domnode.constants.document-position-implementation-specific">DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC</a></code></strong></li>
   </ul>
  </p>

  
  <p class="simpara">
   <span class="methodname"><a href="domxpath.registerphpfunctions.php" class="methodname">DOMXPath::registerPhpFunctions()</a></span>
   に任意の callable を渡すことが可能になりました。

   さらに、<span class="methodname"><a href="domxpath.registerphpfunctionns.php" class="methodname">DOMXPath::registerPhpFunctionNs()</a></span> により、
   <code class="code">php:function(&#039;name&#039;)</code> ではなく、ネイティブな関数呼び出し構文で
   コールバックを登録できるようになりました。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.intl">
  <h3 class="title">Intl</h3>

  <p class="simpara">
   <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-halfodd">NumberFormatter::ROUND_HALFODD</a></code></strong> が追加されました。
   既存の <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-halfeven">NumberFormatter::ROUND_HALFEVEN</a></code></strong> 機能を
   補完します。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.openssl">
  <h3 class="title">OpenSSL</h3>

  <p class="simpara">
   Curve25519 および Curve448 ベースのキーのサポートが追加されました。
   具体的には、x25519、ed25519、x448、ed448 フィールドが
   <span class="function"><a href="function.openssl-pkey-new.php" class="function">openssl_pkey_new()</a></span>、
   <span class="function"><a href="function.openssl-pkey-get-details.php" class="function">openssl_pkey_get_details()</a></span>、
   <span class="function"><a href="function.openssl-sign.php" class="function">openssl_sign()</a></span>、および
   <span class="function"><a href="function.openssl-verify.php" class="function">openssl_verify()</a></span> を、サポートするよう拡張されました。
  </p>

  <p class="simpara">
   パスワードのハッシュ方法として PASSWORD_ARGON2 が実装されました。
   これは OpenSSL 3.2 および NTS ビルドが必要です。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pcre">
  <h3 class="title">PCRE</h3>

  <p class="simpara">
   同梱の pcre2lib がバージョン 10.44 に更新されました。
   これにより、LoongArch JIT サポートが追加され、
   Perl 互換のアイテムで波括弧間のスペースが許可され、
   可変長の後読みアサーションがサポートされるようになりました。
  </p>

  <p class="simpara">
   pcre2lib バージョン 10.44 では、名前付きキャプチャグループの最大長が
   <code class="literal">32</code> から <code class="literal">128</code> に変更されました。
  </p>

  <p class="simpara">
   <code class="literal">r</code> (PCRE2_EXTRA_CASELESS_RESTRICT)
   修飾子と <code class="literal">(?r)</code> モード修飾子のサポートされました。
   大文字・小文字を区別しない修飾子 (<code class="literal">i</code>) と一緒に有効にすると、
   ASCII と非 ASCII 文字の混在が禁止されます。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo">
  <h3 class="title">PDO</h3>

  
  <p class="simpara">
   ドライバ固有のサブクラスのサポートが追加されました。
   PDO のサブクラスを追加することで、
   データベース固有の機能のサポートを向上します。
   新しいクラスは、<span class="methodname"><a href="pdo.connect.php" class="methodname">PDO::connect()</a></span> メソッドを呼び出すか、
   ドライバ固有のサブクラスを直接インスタンス化することで
   利用できます。
  </p>

  
  <p class="para">
   ドライバ固有の SQL パーサーのサポートが追加されました。
   ドライバ固有のパーサーが利用できない場合、デフォルトのパーサーが使われます。
   デフォルトのパーサーは以下をサポートします:
   <ul class="simplelist">
    <li>
     シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ
    </li>
    <li>
     2 つのハイフンによるコメント、ネストされていない C 言語形式のコメント
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-mysql">
  <h3 class="title">PDO_MYSQL</h3>

  
  <p class="para">
   以下をサポートするカスタムパーサーが追加されました:
   <ul class="simplelist">
    <li>
     シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化やバックスラッシュによる
     エスケープ
    </li>
    <li>
     バッククオートで囲まれたリテラルでのクオートの二重化によるエスケープ
    </li>
    <li>
     2 つのハイフンによるコメント、C 言語形式のコメント、
     <code class="literal">#</code> によるコメント
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-pgsql">
  <h3 class="title">PDO_PGSQL</h3>

  
  <p class="para">
   以下をサポートするカスタムパーサーが追加されました:
   <ul class="simplelist">
    <li>
     シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ
    </li>
    <li>
     C 言語形式の「エスケープ」文字列リテラル (<code class="literal">E&#039;string&#039;</code>)
    </li>
    <li>
     ドル記号で囲まれた文字列リテラル
    </li>
    <li>
     2 つのハイフンによるコメント、ネストされていない C 言語形式のコメント
    </li>
    <li>
     <code class="literal">?</code> 演算子のエスケープシーケンスとしての <code class="literal">??</code> のサポート
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.pdo-sqlite">
  <h3 class="title">PDO_SQLITE</h3>

  
  <p class="para">
   以下をサポートするカスタムパーサーが追加されました:
   <ul class="simplelist">
    <li>
     シングルクオート、ダブルクオート、バッククオートで囲まれたリテラルでのクオートの二重化による
     エスケープ
    </li>
    <li>
     識別子の角括弧によるクオート
    </li>
    <li>
     2 つのハイフンとネストされていない C 言語形式のコメント
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.phar">
  <h3 class="title">Phar</h3>

  <p class="simpara">
   Zip アーカイブの Unix タイムスタンプ拡張のサポートが追加されました。
  </p>
 </div>

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

  <p class="simpara">
   <var class="envar">PHP_HISTFILE</var> 環境変数を利用し
   <code class="literal">.php_history</code> パスを変更する機能が追加されました。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.reflection">
  <h3 class="title">Reflection</h3>

  <p class="simpara">
   <span class="classname"><a href="class.reflectionattribute.php" class="classname">ReflectionAttribute</a></span> に
   デバッグ体験を向上させるための <span class="property">name</span> プロパティが追加されました。
  </p>

  <p class="simpara">
   <span class="methodname"><a href="reflectionclassconstant.tostring.php" class="methodname">ReflectionClassConstant::__toString()</a></span>および
   <span class="methodname"><a href="reflectionproperty.tostring.php" class="methodname">ReflectionProperty::__toString()</a></span> は、
   添付されたドキュメントコメントを返すようになりました。
  </p>

  
  <p class="para">
   レイジーオブジェクト機能に関連する複数の新しいメソッドと定数が
   追加されました:

   <ul class="simplelist">
    <li>
     <span class="methodname"><a href="reflectionclass.newlazyghost.php" class="methodname">ReflectionClass::newLazyGhost()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.newlazyproxy.php" class="methodname">ReflectionClass::newLazyProxy()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.resetaslazyghost.php" class="methodname">ReflectionClass::resetAsLazyGhost()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.resetaslazyproxy.php" class="methodname">ReflectionClass::resetAsLazyProxy()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.isuninitializedlazyobject.php" class="methodname">ReflectionClass::isUninitializedLazyObject()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.initializelazyobject.php" class="methodname">ReflectionClass::initializeLazyObject()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.marklazyobjectasinitialized.php" class="methodname">ReflectionClass::markLazyObjectAsInitialized()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionclass.getlazyinitializer.php" class="methodname">ReflectionClass::getLazyInitializer()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionproperty.skiplazyinitialization.php" class="methodname">ReflectionProperty::skipLazyInitialization()</a></span>
    </li>
    <li>
     <span class="methodname"><a href="reflectionproperty.setrawvaluewithoutlazyinitialization.php" class="methodname">ReflectionProperty::setRawValueWithoutLazyInitialization()</a></span>
    </li>
    <li>
     <strong><code><a href="class.reflectionclass.php#reflectionclass.constants.skip-initialization-on-serialize">ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE</a></code></strong>
    </li>
    <li>
     <strong><code><a href="class.reflectionclass.php#reflectionclass.constants.skip-destructor">ReflectionClass::SKIP_DESTRUCTOR</a></code></strong>
    </li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.soap">
  <h3 class="title">SOAP</h3>

  <p class="simpara">
   クラスマップでの名前空間のクラーク式記法のサポートが追加されました。
   クラスマップ内でクラーク式記法を使用して、
   特定の名前空間の型を特定のクラスに解決するエントリを指定できるようになりました。
   例: <code class="code">&#039;{http://example.com}foo&#039; =&gt; &#039;FooClass&#039;</code>
  </p>

  <p class="simpara">
   <span class="interfacename"><a href="class.datetimeinterface.php" class="interfacename">DateTimeInterface</a></span> のインスタンスが
   <code class="literal">xsd:datetime</code> や類似の要素に渡されると、
   空の文字列としてではなく、そのままシリアライズされるようになりました。
  </p>

  <p class="simpara">
   持続的セッションが共有セッションモジュールで動作するようになりました。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.standard">
  <h3 class="title">Standard</h3>

  
  <p class="simpara">
   
   <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span> 列挙型が追加されました。
   <strong><code><a href="math.constants.php#constant.php-round-half-up">PHP_ROUND_<span class="replaceable">*</span></a></code></strong> 定数より
   明確な名前と発見性を提供します。
   さらに、4 つの新しい丸めモードが追加されました。これらは
   <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span> 列挙型を介してのみ利用可能です。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.xsl">
  <h3 class="title">XSL</h3>

  <p class="simpara">
   シングルクオートとダブルクオートの両方を含むパラメータを
   使用できるようになりました。
  </p>

  
  <p class="simpara">
   <span class="methodname"><a href="xsltprocessor.registerphpfunctions.php" class="methodname">XSLTProcessor::registerPhpFunctions()</a></span> に
   任意の callable を渡すことが可能になりました。
   
  </p>

  <p class="simpara">
   <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.maxtemplatedepth">XSLTProcessor::$maxTemplateDepth</a></span> および
   <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.maxtemplatevars">XSLTProcessor::$maxTemplateVars</a></span> が追加されました。
   XSL テンプレート評価の再帰の深さを制御することができます。
  </p>
 </div>

 <div class="sect2" id="migration84.new-features.zip">
  <h3 class="title">Zip</h3>

  <p class="simpara">
  <strong><code><a href="zip.constants.php#ziparchive.constants.er-truncated-zip">ZipArchive::ER_TRUNCATED_ZIP</a></code></strong>
  定数が追加されました。これは libzip 1.11 で追加されました。
  </p>
 </div>

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