<?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.other-changes.php',
    1 => 'その他の変更',
    2 => 'その他の変更',
  ),
  'up' => 
  array (
    0 => 'migration84.php',
    1 => 'PHP 8.3.x から PHP 8.4.x への移行',
  ),
  'prev' => 
  array (
    0 => 'migration84.removed-extensions.php',
    1 => '削除された拡張モジュール',
  ),
  'next' => 
  array (
    0 => 'migration84.windows-support.php',
    1 => 'Windows のサポート',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'appendices/migration84/other-changes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration84.other-changes" class="sect1">
 <h2 class="title">その他の変更</h2>

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

  <div class="sect3" id="migration84.other-changes.core.closures">
   <h4 class="title">クロージャ</h4>

   <p class="simpara">
    クロージャの名前が調整され、親関数の名前と
    定義の行番号を含むようになりました。これにより、
    スタックトレース内などでの識別が容易になります。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.core.fibers">
   <h4 class="title">ファイバー(Fibers)</h4>

   <p class="simpara">
    デストラクタ実行中にファイバーを切り替えられるようになりました。
    以前はガベージコレクションとの競合のためブロックされていました。
   </p>

   <p class="simpara">
    デストラクタは別のファイバー内で実行される場合があります。
   </p>

   <p class="simpara">
    ガベージコレクションがファイバー内でトリガーされると、
    GC によって呼び出されるデストラクタは
    別のファイバー(gc_destructor_fiber)内で実行されます。
    このファイバーが中断された場合、残りのデストラクタを実行するために
    新しいファイバーが作成されます。
    以前の gc_destructor_fiber は GC によって参照されなくなり、
    他に参照されていなければ回収される可能性があります。
    デストラクタが中断されたオブジェクトは、
    デストラクタが戻るか <span class="classname"><a href="class.fiber.php" class="classname">Fiber</a></span> が回収されるまで回収されません。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.core.output">
   <h4 class="title">出力ハンドラ</h4>

   <p class="simpara">
    <span class="function"><a href="function.ob-start.php" class="function">ob_start()</a></span> の <code class="parameter">flags</code> パラメータに渡された
    出力ハンドラのステータスフラグがクリアされるようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.output-add-rewrite-var.php" class="function">output_add_rewrite_var()</a></span> は、
    リライトされるホストを選択するために
    <a href="outcontrol.configuration.php#ini.url-rewriter.hosts" class="link"><code class="literal">url_rewriter.hosts</code></a> を使用するようになりました。
    以前は
    <a href="session.configuration.php#ini.session.trans-sid-hosts" class="link"><code class="literal">session.trans_sid_hosts</code></a>
    を使用していました。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.other-changes.sapi">
  <h3 class="title">SAPI モジュールへの変更</h3>

  <div class="sect3" id="migration84.other-changes.sapi.apache">
   <h4 class="title">apache2handler</h4>

   <p class="simpara">
    EOLを迎えた Apache 2.0 および 2.2 のサポートが削除されました。
    最小必要 Apache バージョンは 2.4 になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.sapi.cli">
   <h4 class="title">CLI</h4>

   <p class="simpara">
    組み込みサーバーは、指定されたファイルが見つからない場合、
    親ディレクトリをたどってインデックスファイルを再帰的に探します。
    このプロセスは、パスがファイルを指しているように見える場合
    （最後のパスコンポーネントにピリオドが含まれる場合）はスキップされていました。
    その場合、404 エラーが返されていました。
    この動作は、すべての場合にインデックスファイルを探すように変更されました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.sapi.fpm">
   <h4 class="title">FPM</h4>

   <p class="simpara">
    本文なしでヘッダをフラッシュできるようになりました。
    
   </p>

   <p class="simpara">
    ステータスページにメモリの最大使用量を表示するフィールドが追加されました。
   </p>

   <p class="simpara">
    
    Solaris/Illumos 用の <var class="filename">/dev/poll</var> <code class="literal">events.mechanism</code>
    設定は廃止されました。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.other-changes.functions">
  <h3 class="title">変更された関数</h3>

  <div class="sect3" id="migration84.other-changes.functions.core">
   <h4 class="title">PHP コア</h4>

   <p class="simpara">
    <span class="function"><a href="function.trigger-error.php" class="function">trigger_error()</a></span> および <span class="function"><a href="function.user-error.php" class="function">user_error()</a></span>
    は、戻り値の型が <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> ではなく <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.dom">
   <h4 class="title">DOM</h4>

   <p class="simpara">
    <span class="methodname"><a href="domdocument.registernodeclass.php" class="methodname">DOMDocument::registerNodeClass()</a></span>
    は、戻り値の型が <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> ではなく <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> になりました。
    実際には常に <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> を返すことしかできませんでした。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.hash">
   <h4 class="title">Hash</h4>

   <p class="simpara">
    <span class="function"><a href="function.hash-update.php" class="function">hash_update()</a></span>
    は、戻り値の型が <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> ではなく <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> になりました。
    実際には常に <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> を返すことしかできませんでした。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.intl">
   <h4 class="title">Intl</h4>

   <p class="simpara">
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-toward-zero">NumberFormatter::ROUND_TOWARD_ZERO</a></code></strong> および
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-away-from-zero">NumberFormatter::ROUND_AWAY_FROM_ZERO</a></code></strong>
    が、新しい <strong><code><a href="math.constants.php#constant.php-round-half-up">PHP_ROUND_<span class="replaceable">*</span></a></code></strong>
    モードと一致するように、
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-down">NumberFormatter::ROUND_DOWN</a></code></strong> および
    <strong><code><a href="class.numberformatter.php#numberformatter.constants.round-up">NumberFormatter::ROUND_UP</a></code></strong>
    のエイリアスとして追加されました。
   </p>

   <p class="simpara">
    <span class="methodname"><a href="resourcebundle.get.php" class="methodname">ResourceBundle::get()</a></span>
    
    は、戻り値の型が <code class="literal">ResourceBundle|array|string|int|null</code> になりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.idn-to-ascii.php" class="function">idn_to_ascii()</a></span> および <span class="function"><a href="function.idn-to-utf8.php" class="function">idn_to_utf8()</a></span>
    関数は、<code class="parameter">domain</code> 名が空または長すぎる場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.idn-to-ascii.php" class="function">idn_to_ascii()</a></span> および <span class="function"><a href="function.idn-to-utf8.php" class="function">idn_to_utf8()</a></span>
    関数は、<code class="parameter">variant</code> パラメータが
    <strong><code><a href="intl.constants.php#constant.intl-idna-variant-uts46">INTL_IDNA_VARIANT_UTS46</a></code></strong> でない場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.libxml">
   <h4 class="title">LibXML</h4>

   <p class="simpara">
    <span class="function"><a href="function.libxml-set-streams-context.php" class="function">libxml_set_streams_context()</a></span> は、
    非ストリームコンテキストリソースが関数に渡された場合、
    ストリームコンテキストが使用されるときではなく、
    直ちに <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.mbstring">
   <h4 class="title">MBString</h4>

   <p class="simpara">
    <span class="function"><a href="function.mb-strcut.php" class="function">mb_strcut()</a></span> の動作は、
    無効な UTF-8 および UTF-16 文字列に対してより一貫性のあるものになりました。
    有効な UTF-8 および UTF-16 文字列に対する動作の変更はありません。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.odbc">
   <h4 class="title">ODBC</h4>

   <p class="simpara">
    <span class="function"><a href="function.odbc-fetch-object.php" class="function">odbc_fetch_object()</a></span>、
    <span class="function"><a href="function.odbc-fetch-array.php" class="function">odbc_fetch_array()</a></span>、および
    <span class="function"><a href="function.odbc-fetch-into.php" class="function">odbc_fetch_into()</a></span> の
    <code class="parameter">row</code> は、デフォルト値が <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> になり、
    <span class="function"><a href="function.odbc-fetch-row.php" class="function">odbc_fetch_row()</a></span> と一致するようになりました。
    以前は、それぞれデフォルト値が
    <code class="literal">-1</code>、
    <code class="literal">-1</code>、
    <code class="literal">0</code>
    でした。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.openssl">
   <h4 class="title">OpenSSL</h4>

   <p class="simpara">
    <span class="function"><a href="function.openssl-csr-new.php" class="function">openssl_csr_new()</a></span> の
    <code class="parameter">extra_attributes</code> は、
    <abbr title="Certificate Signing Request">CSR</abbr> 属性を設定します。
    以前はサブジェクト DN が誤って設定されていました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.openssl-csr-new.php" class="function">openssl_csr_new()</a></span> の
    <code class="parameter">dn</code> は、
    単一のエントリに対して値の <span class="type"><a href="language.types.array.php" class="type array">array</a></span> を設定できるようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.openssl-csr-sign.php" class="function">openssl_csr_sign()</a></span> に新たに
    <code class="parameter">serial_hex</code> が追加され、
    16 進形式でシリアル番号を設定できるようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.openssl-x509-parse.php" class="function">openssl_x509_parse()</a></span> で ASN.1 UTCTime を解析する際、
    OpenSSL バージョン 3.2 未満では秒が省略されていると失敗します
    (そのようなフィールドでは <code class="literal">-1</code> が返されます)。
    OpenSSL バージョン 3.3 以降では、そのような証明書は読み込むことができません。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo">
   <h4 class="title">PDO</h4>

   <p class="simpara">
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> で
    <strong><code><a href="pdo.constants.php#pdo.constants.attr-stringify-fetches">PDO::ATTR_STRINGIFY_FETCHES</a></code></strong>
    属性の値を取得できるようになりました。
   </p>

   <p class="simpara">
    <strong><code>PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE</code></strong> が追加されました。
    サポートされているドライバで <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> を使用して
    クエリ結果のメモリ使用量を取得できるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo-firebird">
   <h4 class="title">PDO_FIREBIRD</h4>

   <p class="simpara">
    
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> で
    
    <strong><code>FB_ATTR_DATE_FORMAT</code></strong>、
    <strong><code>FB_ATTR_TIME_FORMAT</code></strong>、
    <strong><code>FB_ATTR_TIMESTAMP_FORMAT</code></strong> 属性の値を取得できるようになりました。
   </p>

   <p class="para">
    トランザクションの分離レベルとアクセスモードを指定するための新しい属性が追加されました。
    この機能のため 5 つの定数が追加されました:

    <ul class="simplelist">
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.transaction-isolation-level">Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.read-committed">Pdo\Firebird::READ_COMMITTED</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.repeatable-read">Pdo\Firebird::REPEATABLE_READ</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.serializable">Pdo\Firebird::SERIALIZABLE</a></code></strong></li>
     <li><strong><code><a href="class.pdo-firebird.php#pdo-firebird.constants.writable-transaction">Pdo\Firebird::WRITABLE_TRANSACTION</a></code></strong></li>
    </ul>
   </p>

   <p class="simpara">
    永続的な接続を使用する場合、コンストラクタ内での生存チェックが追加されました。
   </p>

   <p class="simpara">
    ビルドされる内容は、
    <var class="filename">ibase.h</var> 内の
    <strong><code>FB_API_VER</code></strong> の値によって変わります。
    この情報を取得するために新しい static メソッド <span class="methodname"><a href="pdo-firebird.getapiversion.php" class="methodname">Pdo\Firebird::getApiVersion()</a></span>
    が追加されました。
    この情報は <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> からも参照できます。
   </p>

   <p class="para">
    5 つの新しいデータ型が利用可能になりました:
    <span class="simplelist"><code class="literal">INT128</code>, <code class="literal">DEC16</code>, <code class="literal">DEC34</code>, <code class="literal">TIMESTAMP_TZ</code>, <code class="literal">TIME_TZ</code></span>

    これらは Firebird 4.0 以降で利用可能です。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo-mysql">
   <h4 class="title">PDO_MYSQL</h4>

   <p class="simpara">
    
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> で
    <strong><code><a href="pdo.constants.php#pdo.constants.attr-fetch-table-names">PDO::ATTR_FETCH_TABLE_NAMES</a></code></strong> 属性の
    値を取得できるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pdo-pgsql">
   <h4 class="title">PDO_PGSQL</h4>

   <p class="simpara">
    <strong><code>PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE</code></strong>
    によるクエリのメモリ使用量の取得をサポートしました。
   </p>

   <p class="simpara">
    カラムが <code class="literal">FLOAT4OID</code> または
    <code class="literal">FLOAT8OID</code> 型の場合、値は
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span> ではなく <span class="type"><a href="language.types.float.php" class="type float">float</a></span> として返されるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.pgsql">
   <h4 class="title">PGSQL</h4>

   <p class="simpara">
    <span class="function"><a href="function.pg-select.php" class="function">pg_select()</a></span> の <code class="parameter">conditions</code> パラメータ
    はオプションになり、空の配列を受け入れるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.phar">
   <h4 class="title">Phar</h4>

   <p class="para">
    <span class="simplelist"><span class="methodname"><a href="phar.setalias.php" class="methodname">Phar::setAlias()</a></span>, <span class="methodname"><a href="phar.setdefaultstub.php" class="methodname">Phar::setDefaultStub()</a></span></span>
    は、戻り値の型が <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> ではなく
    <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.posix">
   <h4 class="title">POSIX</h4>

   <p class="simpara">
    <span class="function"><a href="function.posix-isatty.php" class="function">posix_isatty()</a></span> は、
    ファイル記述子/ストリーム引数が無効な場合エラー番号を設定するようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.reflection">
   <h4 class="title">Reflection</h4>

   <p class="simpara">
    <span class="methodname"><a href="reflectiongenerator.getfunction.php" class="methodname">ReflectionGenerator::getFunction()</a></span>
    は、ジェネレータの実行が終了した後でも呼び出すことができるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.sockets">
   <h4 class="title">Sockets</h4>

   <p class="simpara">
    <span class="function"><a href="function.socket-create-listen.php" class="function">socket_create_listen()</a></span> の
    <code class="parameter">backlog</code> パラメータのデフォルト値は
    <strong><code><a href="sockets.constants.php#constant.somaxconn">SOMAXCONN</a></code></strong> になりました。
    以前は <code class="literal">128</code> でした。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.sodium">
   <h4 class="title">Sodium</h4>

   <p class="simpara">
    <span class="function">sodium_crypto_aead_aes256gcm_<span class="replaceable">*</span></span>
    関数は、ARM 暗号化拡張を持つ aarch64 CPU で
    利用可能になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.spl">
   <h4 class="title">SPL</h4>

   <p class="para">
    <span class="simplelist"><span class="methodname"><a href="splpriorityqueue.insert.php" class="methodname">SplPriorityQueue::insert()</a></span>, <span class="methodname"><a href="splpriorityqueue.recoverfromcorruption.php" class="methodname">SplPriorityQueue::recoverFromCorruption()</a></span>, <span class="methodname"><a href="splheap.insert.php" class="methodname">SplHeap::insert()</a></span>, <span class="methodname"><a href="splheap.recoverfromcorruption.php" class="methodname">SplHeap::recoverFromCorruption()</a></span></span>
    メソッドは、戻り値の型が <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> ではなく
    <span class="type"><a href="language.types.singleton.php" class="type true">true</a></span> になりました。
   </p>

   <p class="simpara">
    <span class="classname"><a href="class.splobjectstorage.php" class="classname">SplObjectStorage</a></span> は
    <span class="interfacename"><a href="class.seekableiterator.php" class="interfacename">SeekableIterator</a></span> を実装するようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.functions.standard">
   <h4 class="title">Standard</h4>

   <p class="simpara">

    <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> で指定できる
    <strong><code><a href="password.constants.php#constant.password-bcrypt">PASSWORD_BCRYPT</a></code></strong> ハッシュアルゴリズムの
    デフォルトの <code class="literal">&#039;cost&#039;</code> 値が
    <code class="literal">10</code> から <code class="literal">12</code> に引き上げられました。
    
   </p>

   <p class="simpara">
    <span class="function"><a href="function.debug-zval-dump.php" class="function">debug_zval_dump()</a></span> は、配列がパックされているかどうかを示すようになりました。
   </p>

   <p class="simpara">
    
    <span class="function"><a href="function.long2ip.php" class="function">long2ip()</a></span> は、戻り値の型が <code class="literal">string|false</code> ではなく
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span> になりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.highlight-string.php" class="function">highlight_string()</a></span> は、戻り値の型が
    
    <code class="literal">string|bool</code> ではなく<span class="type">string|true</span> になりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> は、戻り値の型が
    
    <code class="literal">string|bool</code> ではなく <span class="type">string|true</span> になりました。
   </p>

   
   <div class="sect4">
    <h5 class="title"><span class="function"><a href="function.round.php" class="function">round()</a></span> による丸め処理</h5>

    <p class="simpara">
     <span class="function"><a href="function.round.php" class="function">round()</a></span> 関数の
     <code class="parameter">mode</code> パラメータは、
     
     <code class="literal">RoundingMode|int</code> に拡張され、
     
     新たに追加された <span class="classname"><a href="enum.roundingmode.php" class="classname">RoundingMode</a></span> 列挙型のインスタンスを受け入れます。
     
    </p>

    <p class="para">
     <span class="function"><a href="function.round.php" class="function">round()</a></span> 関数に 4 つの新しいモードが追加されました:
     <span class="simplelist">RoundingMode::PositiveInfinity, RoundingMode::NegativeInfinity, RoundingMode::TowardsZero, RoundingMode::AwayFromZero</span>
     
    </p>

    <p class="simpara">
     整数への丸めのための内部実装が、正確さの検証と
     メンテナンスの容易さのために書き直されました。
     その結果、いくつかの丸め処理のバグが修正されました。
     例えば、以前は <code class="literal">0.49999999999999994</code>を最も近い整数に丸めると、
     正しい結果の <code class="literal">0.0</code> ではなく
     <code class="literal">1.0</code> になっていました。
     他の入力も影響を受け、以前の PHP バージョンと比較して
     異なる出力になる場合があります。
    </p>

    <p class="simpara">
     <span class="function"><a href="function.round.php" class="function">round()</a></span> 関数の「事前丸め」によるバグが修正されました。
     以前は、「事前丸め」により <code class="literal">0.285</code>
     (実際には <code class="literal">0.28499999999999998</code>)のような値を
     10 進数として、<code class="literal">0.29</code> に丸めていました。
     しかし、「事前丸め」は特定の数値を誤って丸めるため、
     この修正では「事前丸め」を削除し、値同士の比較方法を変更することで、
     値が 10 進数として正しく丸められるようにしました。
    </p>

    <p class="simpara">
     <span class="function"><a href="function.round.php" class="function">round()</a></span> が処理できる最大精度が
     1桁増えました。
     例えば、<code class="code">round(4503599627370495.5)</code> は以前は
     <code class="literal">4503599627370495.5</code> を返していましたが、
     現在は <code class="literal">4503599627370496</code> を返します。
    </p>

   </div>
  </div>

 </div>

 <div class="sect2" id="migration84.other-changes.extensions">
  <h3 class="title">拡張モジュールへのその他の変更</h3>

  <div class="sect3" id="migration84.other-changes.extensions.curl">
   <h4 class="title">cURL</h4>

   <p class="simpara">
    最小必要 libcurl バージョンは 7.61.0 になりました。
   </p>

   <p class="simpara">
    <strong><code><a href="curl.constants.php#constant.curlopt-dns-use-global-cache">CURLOPT_DNS_USE_GLOBAL_CACHE</a></code></strong> オプションは
    もはや効果がなく、通知なく無視されます。
    この基本機能は libcurl 7.11.1 で非推奨となり、
    libcurl 7.62.0 で削除されました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.gmp">
   <h4 class="title">GMP</h4>

   
   <p class="simpara">
    <span class="classname"><a href="class.gmp.php" class="classname">GMP</a></span> オブジェクトを <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> に
    キャストできるようになりました。以前は <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong> が発生していました。
    キャストの動作はオーバーロードされ、値が <code class="literal">0</code> を表す
    <span class="classname"><a href="class.gmp.php" class="classname">GMP</a></span> オブジェクトは <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> にキャストされます。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.libxml">
   <h4 class="title">LibXML</h4>

   <p class="simpara">
    最小必要 libxml2 バージョンは 2.9.4 になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.intl">
   <h4 class="title">Intl</h4>

   <p class="simpara">
    Intl クラスの動作が統一され、
    初期化されていないオブジェクトを使用しようとした場合やクローンに失敗した場合に、
    <span class="exceptionname"><a href="class.error.php" class="exceptionname">Error</a></span> 例外をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.mbstring">
   <h4 class="title">MBString</h4>

   <p class="simpara">
    Unicode データテーブルが Unicode 16.0 に更新されました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.mysqlnd">
   <h4 class="title">MySQLnd</h4>

   <p class="simpara">
    MySQL 9 の新しい VECTOR データ型のサポート。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.openssl">
   <h4 class="title">OpenSSL</h4>

   <p class="simpara">
    最小必要 OpenSSL バージョンは 1.1.1 になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.pdo-pgsql">
   <h4 class="title">PDO_PGSQL</h4>

   <p class="simpara">
    最小必要 libpq バージョンは 10.0 になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.pgsql">
   <h4 class="title">PGSQL</h4>

   <p class="simpara">
    最小必要 libpq バージョンは 10.0 になりました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.spl">
   <h4 class="title">SPL</h4>

   <p class="simpara">
    <span class="classname"><a href="class.splfixedarray.php" class="classname">SplFixedArray</a></span> での範囲外アクセスは、
    <span class="exceptionname"><a href="class.runtimeexception.php" class="exceptionname">RuntimeException</a></span> ではなく
    <span class="exceptionname"><a href="class.outofboundsexception.php" class="exceptionname">OutOfBoundsException</a></span> 型の例外をスローするようになりました。
    <span class="exceptionname"><a href="class.outofboundsexception.php" class="exceptionname">OutOfBoundsException</a></span> は
    <span class="exceptionname"><a href="class.runtimeexception.php" class="exceptionname">RuntimeException</a></span> の子クラスであるため、
    これらの例外をキャッチしようとする際の動作に変更はありません。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.xsl">
   <h4 class="title">XSL</h4>

   <p class="simpara">
    型付きプロパティ <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.clonedocument">XSLTProcessor::$cloneDocument</a></span>
    および <span class="property"><a href="class.xsltprocessor.php#xsltprocessor.props.doxinclude">XSLTProcessor::$doXInclude</a></span> が定義されました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.extensions.zlib">
   <h4 class="title">Zlib</h4>

   <p class="simpara">
    最小必要 zlib バージョンは 1.2.11 になりました。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.other-changes.performance">
  <h3 class="title">パフォーマンス</h3>

  <div class="sect3" id="migration84.other-changes.performance.core">
   <h4 class="title">PHP コア</h4>

   <p class="simpara">
    ZTS ビルドにおける高負荷の並行処理環境下で、
    浮動小数点数の解析とフォーマットのパフォーマンスが向上しました。
    これは <span class="function"><a href="function.printf.php" class="function">printf()</a></span> 系の関数や
    <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span>、<span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>
    などのシリアライズ関数に影響します。
   </p>

   <p class="simpara">
    <code class="literal">%s</code> と <code class="literal">%d</code> 指定子のみを使用する
    <span class="function"><a href="function.sprintf.php" class="function">sprintf()</a></span> は、同等の文字列補間にコンパイルされ、
    関数呼び出しのオーバーヘッドとフォーマット文字列の
    繰り返し解析を回避します。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.bcmath">
   <h4 class="title">BCMath</h4>

   <p class="simpara">
    数値の変換と演算のパフォーマンスが向上しました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.dom">
   <h4 class="title">DOM</h4>

   <p class="simpara">
    <span class="methodname"><a href="domnode.c14n.php" class="methodname">DOMNode::C14N()</a></span> のパフォーマンスが、
    xpath クエリなしの場合に大幅に向上しました。
    これは数万ノードのドキュメントで簡単に 2 桁の
    時間改善をもたらします。
   </p>

   <p class="simpara">
    XML シリアライズのパフォーマンスが向上し、メモリ消費が削減されました。
   </p>

   <p class="simpara">
    ノードクラスのメモリ使用量が削減されました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.ftp">
   <h4 class="title">FTP</h4>

   <p class="simpara">
    大きなアップロードで FTP アップロードのパフォーマンスが
    最大 10 倍向上しました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.hash">
   <h4 class="title">Hash</h4>

   <p class="simpara">
    SHA-256 の SSE2 および SHA-NI 実装が追加されました。
    これにより、サポートされている CPU でのパフォーマンスが SSE2 で最大 1.3 倍、
    SHA-NIで 3から 5 倍向上します。
    この最適化は Colin Percival / Tarsnap の功績です。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.mbstring">
   <h4 class="title">MBString</h4>

   <p class="simpara">
    <span class="function"><a href="function.mb-strcut.php" class="function">mb_strcut()</a></span> は UTF-8 および
    UTF-16 文字列で大幅に高速になりました。
   </p>

   <p class="simpara">
    mbstring のエンコーディング名の検索が大幅に高速になりました。
   </p>

   <p class="simpara">
    SJIS-win から Unicode への変換のパフォーマンスが大幅に向上しました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.mysqlnd">
   <h4 class="title">MySQLnd</h4>

   <p class="simpara">
    MySQLnd のクオートのパフォーマンスが向上しました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.pcre">
   <h4 class="title">PCRE</h4>

   <p class="simpara">
    名前付きキャプチャグループのパフォーマンスが向上しました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.random">
   <h4 class="title">Random</h4>

   <p class="simpara">
    <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span> のパフォーマンスが向上しました。
    特に <span class="methodname"><a href="random-randomizer.getbytes.php" class="methodname">Random\Randomizer::getBytes()</a></span> と
    <span class="methodname"><a href="random-randomizer.getbytesfromstring.php" class="methodname">Random\Randomizer::getBytesFromString()</a></span> メソッドで顕著です。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.simplexml">
   <h4 class="title">SimpleXML</h4>

   <p class="simpara">
    XML シリアライズのパフォーマンスが向上し、メモリ消費が削減されました。
   </p>
  </div>

  <div class="sect3" id="migration84.other-changes.performance.standard">
   <h4 class="title">Standard</h4>

   <p class="simpara">
    <span class="function"><a href="function.strspn.php" class="function">strspn()</a></span> および <span class="function"><a href="function.strcspn.php" class="function">strcspn()</a></span> の
    パフォーマンスが大幅に向上しました。
    二乗時間ではなく、線形時間で実行されるようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.strpbrk.php" class="function">strpbrk()</a></span> のパフォーマンスが向上しました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.get-browser.php" class="function">get_browser()</a></span> は大幅に高速になり、
    いくつかのテストケースで最大 1.5 倍から 2.5 倍の速度向上を実現しました。
   </p>
  </div>
 </div>

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