<?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.incompatible.php',
    1 => '下位互換性のない変更点',
    2 => '下位互換性のない変更点',
  ),
  'up' => 
  array (
    0 => 'migration84.php',
    1 => 'PHP 8.3.x から PHP 8.4.x への移行',
  ),
  'prev' => 
  array (
    0 => 'migration84.constants.php',
    1 => '新しいグローバル定数',
  ),
  'next' => 
  array (
    0 => 'migration84.deprecated.php',
    1 => 'PHP 8.4.x で推奨されなくなる機能',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'appendices/migration84/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration84.incompatible" class="sect1">
 <h2 class="title">下位互換性のない変更点</h2>

 <p class="simpara">
  このセクションで明示的に述べられていなくても、
  新しい<a href="migration84.new-functions.php" class="link">関数</a>、
  <a href="migration84.new-classes.php" class="link">クラス、インターフェイス、列挙型</a>、
  または<a href="migration84.constants.php" class="link">定数</a>は、
  再宣言による<span class="exceptionname"><a href="class.error.php" class="exceptionname">Error</a></span>がスローされる可能性があります。
 </p>

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

  
  <div class="sect3" id="migration84.incompatible.core.exit">
   <h4 class="title"><span class="function"><a href="function.exit.php" class="function">exit()</a></span> の動作の変更</h4>

   <p class="simpara">
    <span class="function"><a href="function.exit.php" class="function">exit()</a></span> (および<span class="function"><a href="function.die.php" class="function">die()</a></span>)
    言語構造は、関数のように振る舞います。
    これにより、<span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>として渡すことができ、
    
    <code class="literal">strict_types</code> 宣言の影響を受け、
    任意の非整数値を文字列にキャストする代わりに、通常の型強制を行います。
   </p>

   <p class="simpara">
    そのため、<span class="function"><a href="function.exit.php" class="function">exit()</a></span> および <span class="function"><a href="function.die.php" class="function">die()</a></span> に
    無効な型を渡すと、一貫して<span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> が
    スローされるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.core.recursion-comparison">
   <h4 class="title">比較中の再帰</h4>

   <p class="simpara">
    比較中に再帰が発生すると、
    <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> の致命的なエラーの代わりに、
    <span class="exceptionname"><a href="class.error.php" class="exceptionname">Error</a></span> 例外がスローされるようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.core.readonly-indirect-modification">
   <h4 class="title">readonly プロパティの間接的な変更</h4>

   
   <p class="simpara">
    <code class="code">__clone()</code> 内で readonly プロパティを間接的に変更することは、
    もはや許可されなくなりました。例えば、<code class="code">$ref = &amp;$this-&gt;readonly</code> のようなコードです。
    これは readonly の初期化時にはすでに禁止されており、
    「クローン時の readonly の再初期化」の実装における見落としでした。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.core.constant-type-change">
   <h4 class="title">定数の型の変更</h4>

   <p class="simpara">
    <strong><code><a href="reserved.constants.php#constant.php-debug">PHP_DEBUG</a></code></strong> および <strong><code><a href="reserved.constants.php#constant.php-zts">PHP_ZTS</a></code></strong> 定数の型が、
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> から <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> に変更されました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.core.tempnam-length">
   <h4 class="title">一時ファイル名の長さ</h4>

   <p class="simpara">
    アップロードされたファイルや <span class="function"><a href="function.tempnam.php" class="function">tempnam()</a></span> 関数で作成されるファイルの名前は、
    以前より13バイト長くなりました。
    総合的な長さは引き続きプラットフォーム依存です。
   </p>
  </div>

  
  <div class="sect3" id="migration84.incompatible.core.e-strict">
   <h4 class="title"><strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong> エラーレベルの削除</h4>

   <p class="simpara">
    <strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong> エラーレベルは、
    PHPエンジン内で使用されなくなったため削除されました。
    <strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong> 定数は非推奨となりました。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.incompatible.typed-constants">
  <h3 class="title">型が追加された拡張クラスの定数</h3>

  <p class="para">
   以下の拡張クラスは、定数に型が宣言されました:
   <ul class="simplelist">
    <li><a href="book.datetime.php" class="link">Date</a></li>
    <li><a href="book.intl.php" class="link">Intl</a></li>
    <li><a href="book.pdo.php" class="link">PDO</a></li>
    <li><a href="book.reflection.php" class="link">Reflection</a></li>
    <li><a href="book.spl.php" class="link">SPL</a></li>
    <li><a href="book.sqlite3.php" class="link">Sqlite</a></li>
    <li><a href="book.xmlreader.php" class="link">XMLReader</a></li>
   </ul>
  </p>
 </div>

 
 <div class="sect2" id="migration84.incompatible.resource2object">
  <h3 class="title">リソースからオブジェクトへの移行</h3>

  <p class="simpara">
   いくつかの <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> が <span class="type"><a href="language.types.object.php" class="type object">object</a></span> に移行されました。
   <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span> を使用した戻り値のチェックは、
   特に指定がない限り、<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> かどうかを確認するように置き換える必要があります。
  </p>

  <div class="sect3" id="migration84.incompatible.resource2object.dba">
   <h4 class="title">DBA</h4>

   <p class="simpara">
    <a href="book.dba.php" class="link">DBA</a> 関数は、
    <code class="literal">dba_connection</code> <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> の代わりに
    <span class="classname"><a href="class.dba-connection.php" class="classname">Dba\Connection</a></span> オブジェクトを受け取り、返すようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.resource2object.odbc">
   <h4 class="title">ODBC</h4>

   <p class="simpara">
    <a href="book.uodbc.php" class="link">ODBC</a> 関数は、
    <code class="literal">odbc_result</code> <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> の代わりに
    <span class="classname"><strong class="classname">Odbc\Result</strong></span> オブジェクトを受け取り、返すようになりました。
   </p>

   <p class="simpara">
    <a href="book.uodbc.php" class="link">ODBC</a> 関数は、
    <code class="literal">odbc_connection</code> <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> の代わりに
    <span class="classname"><strong class="classname">Odbc\Connection</strong></span> オブジェクトを受け取り、返すようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.resource2object.soap">
   <h4 class="title">SOAP</h4>

   <p class="simpara">
    <span class="property"><a href="class.soapclient.php#soapclient.props.httpurl">SoapClient::$httpurl</a></span> プロパティは、
    <code class="literal">soap_url</code> <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> の代わりに
    <span class="classname"><strong class="classname">Soap\Url</strong></span> オブジェクトになりました。
    <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span> を使用したチェック
    (例: <code class="code">is_resource($client-&gt;httpurl)</code>)は、
    <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> かどうかのチェック(例: <code class="code">$client-&gt;httpurl !== null</code>)に置き換える必要があります。
   </p>
   <p class="simpara">
    <span class="property"><a href="class.soapclient.php#soapclient.props.sdl">SoapClient::$sdl</a></span> プロパティは、
    <code class="literal">soap_sdl</code> <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> の代わりに
    <span class="classname"><strong class="classname">Soap\Sdl</strong></span> オブジェクトになりました。
    <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span> を使用したチェック
    (例: <code class="code">is_resource($client-&gt;sdl)</code>)は、
    <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> かどうかのチェック(例: <code class="code">$client-&gt;sdl !== null</code>)に置き換える必要があります。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.incompatible.new-warnings-exceptions">
  <h3 class="title">新しい警告と例外</h3>

  <p class="simpara">
   プログラミングエラー、つまり無効な値が引数として提供された場合にトリガーされる
   新しい警告と例外が追加されました。
  </p>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.curl">
   <h4 class="title">cURL</h4>

   <p class="simpara">
    <span class="function"><a href="function.curl-multi-select.php" class="function">curl_multi_select()</a></span> は、
    <code class="parameter">timeout</code> パラメータが <code class="literal">0</code> 未満または
    <strong><code><a href="reserved.constants.php#constant.php-int-max">PHP_INT_MAX</a></code></strong> を超える場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.gd">
   <h4 class="title">GD</h4>

   <p class="para">
    <span class="simplelist"><span class="function"><a href="function.imagejpeg.php" class="function">imagejpeg()</a></span>, <span class="function"><a href="function.imagewebp.php" class="function">imagewebp()</a></span>, <span class="function"><a href="function.imagepng.php" class="function">imagepng()</a></span>, <span class="function"><a href="function.imageavif.php" class="function">imageavif()</a></span></span>
    は、無効な <code class="parameter">quality</code> が渡された場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.imageavif.php" class="function">imageavif()</a></span> は、
    無効な <code class="parameter">speed</code> パラメータ値が渡された場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.imagescale.php" class="function">imagescale()</a></span> は、
    <code class="parameter">width</code> または <code class="parameter">height</code> パラメータが
    アンダーフロー/オーバーフローした場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.imagescale.php" class="function">imagescale()</a></span> は、
    無効な <code class="parameter">mode</code> パラメータ値が渡された場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.imagefilter.php" class="function">imagefilter()</a></span> は、
    <strong><code><a href="image.constants.php#constant.img-filter-scatter">IMG_FILTER_SCATTER</a></code></strong> フィルタで、
    <code class="parameter">sub</code> または <code class="parameter">plus</code> パラメータが
    アンダーフロー/オーバーフローした場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.gettext">
   <h4 class="title">Gettext</h4>

   <p class="para">
    <span class="simplelist"><span class="function"><a href="function.bind-textdomain-codeset.php" class="function">bind_textdomain_codeset()</a></span>, <span class="function"><a href="function.textdomain.php" class="function">textdomain()</a></span>, <span class="function">d<span class="replaceable">*</span>gettext</span></span>
    は、<code class="parameter">domain</code> が空文字列の場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.intl">
   <h4 class="title">Intl</h4>

   <p class="para">
    <span class="function"><a href="resourcebundle.get.php" class="function">resourcebundle_get()</a></span>、
    <span class="methodname"><a href="resourcebundle.get.php" class="methodname">ResourceBundle::get()</a></span>、および
    <span class="classname"><a href="class.resourcebundle.php" class="classname">ResourceBundle</a></span> オブジェクトでのオフセットアクセスは、
    以下の場合に例外をスローするようになりました:
    <ul class="simplelist">
     <li>
      無効なオフセット型の場合、<span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>
     </li>
     <li>
      空の <span class="type"><a href="language.types.string.php" class="type string">string</a></span> の場合、<span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
     </li>
     <li>
      整数インデックスが符号付き32ビット整数に収まらない場合、
      <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
     </li>
    </ul>
   </p>

   <p class="simpara">
    <span class="methodname"><a href="intldateformatter.create.php" class="methodname">IntlDateFormatter::__construct()</a></span> は、
    <code class="parameter">locale</code> が無効な場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="methodname"><a href="numberformatter.create.php" class="methodname">NumberFormatter::__construct()</a></span> は、
    <code class="parameter">locale</code> が無効な場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.mbstring">
   <h4 class="title">MBString</h4>

   <p class="simpara">
    <span class="function"><a href="function.mb-encode-numericentity.php" class="function">mb_encode_numericentity()</a></span> および
    <span class="function"><a href="function.mb-decode-numericentity.php" class="function">mb_decode_numericentity()</a></span> は、
    <code class="parameter">map</code> が <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> のみで構成されているかをチェックし、
    そうでない場合 <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.mb-http-input.php" class="function">mb_http_input()</a></span> は、
    <code class="parameter">type</code> が無効な場合、常に
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.mb-http-output.php" class="function">mb_http_output()</a></span> は、
    <code class="parameter">encoding</code> にヌルバイトが含まれていないかをチェックし、
    含まれている場合 <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.odbc">
   <h4 class="title">ODBC</h4>

   <p class="simpara">
    <span class="function"><a href="function.odbc-fetch-row.php" class="function">odbc_fetch_row()</a></span> は、
    <code class="parameter">row</code> が <code class="literal">0</code> 以下の場合、
    <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を返すようになりました。この場合、警告が発せられます。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.pcntl">
   <h4 class="title">PCNTL</h4>

   <p class="para">
    <span class="function"><a href="function.pcntl-sigprocmask.php" class="function">pcntl_sigprocmask()</a></span>、
    <span class="function"><a href="function.pcntl-sigwaitinfo.php" class="function">pcntl_sigwaitinfo()</a></span>、および
    <span class="function"><a href="function.pcntl-sigtimedwait.php" class="function">pcntl_sigtimedwait()</a></span> 関数は、次の場合エラーをスローするようになりました:
    <ul class="simplelist">
     <li>
      <code class="parameter">signals</code> 配列が空の場合、
      <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
      (<span class="function"><a href="function.pcntl-sigprocmask.php" class="function">pcntl_sigprocmask()</a></span> で
      <code class="parameter">mode</code> が <strong><code><a href="pcntl.constants.php#constant.sig-setmask">SIG_SETMASK</a></code></strong> のときを除く)
     </li>
     <li>
      <code class="parameter">signals</code> 配列の値が <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> でない場合、
      <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span>
     </li>
     <li>
      <code class="parameter">signals</code> 配列の値が有効なシグナル番号でない場合、
      <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
     </li>
    </ul>
   </p>

   <p class="simpara">
    <span class="function"><a href="function.pcntl-sigprocmask.php" class="function">pcntl_sigprocmask()</a></span> 関数は、
    <code class="parameter">mode</code> が <strong><code><a href="pcntl.constants.php#constant.sig-block">SIG_BLOCK</a></code></strong>、
    <strong><code><a href="pcntl.constants.php#constant.sig-unblock">SIG_UNBLOCK</a></code></strong>、<strong><code><a href="pcntl.constants.php#constant.sig-setmask">SIG_SETMASK</a></code></strong> のいずれでもない場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="para">
    <span class="function"><a href="function.pcntl-sigtimedwait.php" class="function">pcntl_sigtimedwait()</a></span> 関数は、次の場合エラーをスローするようになりました:
    <ul class="simplelist">
     <li>
      <code class="parameter">seconds</code> が <code class="literal">0</code> 未満の場合、
      <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
     </li>
     <li>
      <code class="parameter">nanoseconds</code> が <code class="literal">0</code> 未満
      または <code class="literal">1e9</code> を超える場合、
      <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
     </li>
     <li>
      <code class="parameter">seconds</code> および <code class="parameter">nanoseconds</code> が両方とも
      <code class="literal">0</code> の場合、<span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
     </li>
    </ul>
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.session">
   <h4 class="title">Session</h4>

   <p class="simpara">
    <a href="session.configuration.php#ini.session.gc-divisor" class="link">session.gc_divisor</a> に正でない値を設定したり、
    <a href="session.configuration.php#ini.session.gc-probability" class="link">session.gc_probability</a>
    に負の値を設定したりすると、警告が発生するようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.simplexml">
   <h4 class="title">SimpleXML</h4>

   <p class="simpara">
    <span class="function"><a href="function.simplexml-import-dom.php" class="function">simplexml_import_dom()</a></span> に非XMLオブジェクトを渡すと、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> の代わりに
    <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.standard">
   <h4 class="title">Standard</h4>

   <p class="simpara">
    <span class="function"><a href="function.round.php" class="function">round()</a></span> 関数は、 <code class="parameter">mode</code> の値を検証し、
    無効なモードの場合、<span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
    以前は、無効なモードは <strong><code><a href="math.constants.php#constant.php-round-half-up">PHP_ROUND_HALF_UP</a></code></strong> と解釈されていました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.str-getcsv.php" class="function">str_getcsv()</a></span> は、
    <code class="parameter">separator</code> および <code class="parameter">enclosure</code> 引数が
    1バイトの長さでない場合、または <code class="parameter">escape</code> 引数が
    1バイトの長さでないか空文字列でない場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
    これは、<span class="function"><a href="function.fputcsv.php" class="function">fputcsv()</a></span> および <span class="function"><a href="function.fgetcsv.php" class="function">fgetcsv()</a></span> の動作と
    同じになるように合わせたものです。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.php-uname.php" class="function">php_uname()</a></span> 関数は、
    <code class="parameter">mode</code> が無効な場合、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> の
    <code class="literal">&quot;allowed_classes&quot;</code> オプションは、
    クラス名の <span class="type"><a href="language.types.array.php" class="type array">array</a></span> でない場合、
    <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> および
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.xmlreader">
   <h4 class="title">XMLReader</h4>

   <p class="simpara">
    無効な文字エンコーディングを
    <span class="methodname"><a href="xmlreader.open.php" class="methodname">XMLReader::open()</a></span> または
    <span class="methodname"><a href="xmlreader.xml.php" class="methodname">XMLReader::XML()</a></span> に渡すと、
    <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>

   <p class="simpara">
    ヌルバイトを含む <span class="type"><a href="language.types.string.php" class="type string">string</a></span> を渡すと、以前は警告が発せられていましたが、
    現在は <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.xmlwriter">
   <h4 class="title">XMLWriter</h4>

   <p class="simpara">
    ヌルバイトを含む <span class="type"><a href="language.types.string.php" class="type string">string</a></span> を渡すと、以前は警告が発せられていましたが、
    現在は <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
   </p>
  </div>

  <div class="sect3" id="migration84.incompatible.new-warnings-exceptions.xsl">
   <h4 class="title">XSL</h4>

   <p class="simpara">
    <span class="methodname"><a href="xsltprocessor.setparameter.php" class="methodname">XSLTProcessor::setParameter()</a></span> は、
    引数にヌルバイトが含まれる場合、<span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> をスローするようになりました。
    これは、そもそも正しく動作していませんでした。
   </p>

   <p class="simpara">
    <span class="methodname"><a href="xsltprocessor.importstylesheet.php" class="methodname">XSLTProcessor::importStyleSheet()</a></span> に
    非XMLオブジェクトを渡すと、<span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> の代わりに
    <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> がスローされるようになりました。
   </p>

   
   <p class="simpara">
    評価中にPHP関数コールバックの呼び出しに失敗した場合、
    警告の発生ではなく、例外がスローされるようになりました。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.incompatible.date">
  <h3 class="title">Date</h3>

  <p class="para">
   <a href="datetime.formats.php#datetime.formats.relative" class="link">相対的な書式</a>
   の <code class="literal">number</code> シンボルは、
   再び複数の符号を受け入れるようになりました。
   たとえば <code class="literal">+-2</code> のような形式です。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.dom">
  <h3 class="title">DOM</h3>

  <p class="simpara">
   一部のDOMメソッドは、新しいノードを割り当てられない場合、以前は
   <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を返すか、<strong><code><a href="dom.constants.php#constant.dom-php-err">DOM_PHP_ERR</a></code></strong> コードの
   <span class="exceptionname"><a href="class.domexception.php" class="exceptionname">DOMException</a></span> をスローしていました。
   これらは現在、一貫して <strong><code><a href="dom.constants.php#constant.dom-invalid-state-err">DOM_INVALID_STATE_ERR</a></code></strong> コードの
   <span class="exceptionname"><a href="class.domexception.php" class="exceptionname">DOMException</a></span> をスローするようになりました。
   この状況は極めてまれであり、影響を受ける可能性は低いです。
   その結果、<span class="methodname"><a href="domimplementation.createdocument.php" class="methodname">DOMImplementation::createDocument()</a></span> は、
   
   戻り値の型が、以前の <code class="code">DOMDocument|false</code> から
   <span class="classname"><a href="class.domdocument.php" class="classname">DOMDocument</a></span> になりました。
  </p>

  <p class="simpara">
   以前は、<span class="classname"><a href="class.domxpath.php" class="classname">DOMXPath</a></span> オブジェクトをクローンできましたが、
   返されるオブジェクトは使用できませんでした。
   これはもはや可能ではなく、<span class="classname"><a href="class.domxpath.php" class="classname">DOMXPath</a></span> オブジェクトをクローンすると、
   <span class="exceptionname"><a href="class.error.php" class="exceptionname">Error</a></span> がスローされるようになりました。
  </p>

  
  <p class="simpara">
   <span class="methodname"><strong>DOMImplementation::getFeature()</strong></span> メソッドは削除されました。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.gmp">
  <h3 class="title">GMP</h3>

  
  <p class="simpara">
   <span class="classname"><a href="class.gmp.php" class="classname">GMP</a></span> クラスは final になり、継承できなくなりました。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.mbstring">
  <h3 class="title">MBString</h3>

  <p class="simpara">
   無効な文字列(エンコーディングエラーを含む)に対して、
   <span class="function"><a href="function.mb-substr.php" class="function">mb_substr()</a></span> は他の多くの mbstring 関数と同様に、
   文字インデックスを解釈するようになりました。
   これにより、<span class="function"><a href="function.mb-strpos.php" class="function">mb_strpos()</a></span> が返す文字インデックスを
   <span class="function"><a href="function.mb-substr.php" class="function">mb_substr()</a></span> に渡すことができます。
  </p>

  <p class="simpara">
   SJIS-Mac(MacJapanese) 文字列の場合、<span class="function"><a href="function.mb-substr.php" class="function">mb_substr()</a></span>
   に渡される文字インデックスは、文字列が Unicode に変換されたときに生成される
   Unicode コードポイントのインデックスを参照します。
   これは、 SJIS-Mac の約40文字が複数の Unicode コードポイントの
   シーケンスに変換されることによる重要な処理です。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.mysqli">
  <h3 class="title">MySQLi</h3>

  <p class="simpara">
   未使用でドキュメント化されていない定数
   <strong><code>MYSQLI_SET_CHARSET_DIR</code></strong> は削除されました。
  </p>

  <p class="simpara">
   <strong><code><a href="mysqli.constants.php#constant.mysqli-stmt-attr-prefetch-rows">MYSQLI_STMT_ATTR_PREFETCH_ROWS</a></code></strong> 定数は削除されました。
   この機能は mysqlnd では利用できません。
  </p>

  <p class="simpara">
   <strong><code><a href="mysqli.constants.php#constant.mysqli-cursor-type-for-update">MYSQLI_CURSOR_TYPE_FOR_UPDATE</a></code></strong> および
   <strong><code><a href="mysqli.constants.php#constant.mysqli-cursor-type-scrollable">MYSQLI_CURSOR_TYPE_SCROLLABLE</a></code></strong> 定数は
   削除されました。この機能は mysqlnd および libmysql のどちらでも
   実装されていませんでした。
  </p>

  <p class="simpara">
   未使用の <strong><code><a href="mysqli.constants.php#constant.mysqli-type-interval">MYSQLI_TYPE_INTERVAL</a></code></strong> 定数は、
   現在は <strong><code><a href="mysqli.constants.php#constant.mysqli-type-enum">MYSQLI_TYPE_ENUM</a></code></strong> のエイリアスであり、削除されました。
   
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.mysqlnd">
  <h3 class="title">MySQLnd</h3>

  <p class="simpara">
   MySQL サーバーの待機タイムアウトに対して報告されるエラーコードは、
   MySQL サーバーバージョン 8.0.24 以降で
   <code class="literal">2006</code> から <code class="literal">4031</code> に変更されました。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.opcache">
  <h3 class="title">Opcache</h3>

  <p class="simpara">
   64ビットアーキテクチャ上での
   <a href="opcache.configuration.php#ini.opcache.interned-strings-buffer" class="link">opcache.interned_strings_buffer</a>
   設定の最大値は <code class="literal">32767</code> になりました。
   以前は <code class="literal">4095</code> でした。
  </p>

  <div class="sect3">
   <h4 class="title">JIT</h4>

   <p class="simpara">
    JIT のデフォルトの設定値は、
    <a href="opcache.configuration.php#ini.opcache.jit" class="link"><code class="literal">opcache.jit=tracing</code></a>
    および <a href="opcache.configuration.php#ini.opcache.jit-buffer-size" class="link"><code class="literal">opcache.jit_buffer_size=0</code></a>
    から、 <a href="opcache.configuration.php#ini.opcache.jit" class="link"><code class="literal">opcache.jit=disable</code></a> および
    <a href="opcache.configuration.php#ini.opcache.jit-buffer-size" class="link"><code class="literal">opcache.jit_buffer_size=64M</code></a> にそれぞれ変更されました。
   </p>

   <p class="simpara">
    これはデフォルトの動作には影響しません。
    JIT は引き続きデフォルトで無効になっています。
    ただし、
    <a href="opcache.configuration.php#ini.opcache.jit-buffer-size" class="link">opcache.jit_buffer_size</a> ではなく、
    <a href="opcache.configuration.php#ini.opcache.jit" class="link">opcache.jit</a> を通じて無効化されています。
    これは、以前に
    <a href="opcache.configuration.php#ini.opcache.jit-buffer-size" class="link">opcache.jit_buffer_size</a>
    のみを使用して JIT を有効にし、
    <a href="opcache.configuration.php#ini.opcache.jit" class="link">opcache.jit</a>
    を使用してJIT モードを指定していなかったユーザーに影響を与える可能性があります。
    JIT コンパイルを有効にするには、
    <a href="opcache.configuration.php#ini.opcache.jit" class="link">opcache.jit</a> の設定値を適切に設定してください。
   </p>

   <p class="simpara">
    <abbr>JIT</abbr> コンパイルが有効になっている場合、
    <abbr>JIT</abbr> コンパイラの初期化に何らかの理由で失敗すると、
    PHP は起動時に致命的なエラーで終了するようになりました。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration84.incompatible.pcntl">
  <h3 class="title">PCNTL</h3>

  <p class="simpara">
   <span class="function"><a href="function.pcntl-sigprocmask.php" class="function">pcntl_sigprocmask()</a></span>、
   <span class="function"><a href="function.pcntl-sigwaitinfo.php" class="function">pcntl_sigwaitinfo()</a></span>、
   および <span class="function"><a href="function.pcntl-sigtimedwait.php" class="function">pcntl_sigtimedwait()</a></span> 関数は、
   失敗時に常に <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を返すようになりました。
   以前は場合によっては <code class="literal">-1</code> を返すことがありました。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.pcre">
  <h3 class="title">PCRE</h3>

  <p class="simpara">
   バンドルされた pcre2lib はバージョン 10.44 に更新されました。
   その結果、<code class="literal">{,3}</code> はテキストとしてではなく
   量指定子として認識されるようになりました。
   さらに、UCP モードでの一部の文字クラスの意味が変更されました。
   完全な変更ログは <a href="https://github.com/PCRE2Project/pcre2/blob/master/NEWS" class="link external">&raquo;&nbsp;PCRE2 Changelog</a> を
   参照してください。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.pdo-dblib">
  <h3 class="title">PDO_DBLIB</h3>

  <p class="simpara">
   <strong><code><a href="class.pdo-dblib.php#pdo-dblib.constants.attr-stringify-uniqueidentifier">Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIER</a></code></strong> および
   <strong><code><a href="class.pdo-dblib.php#pdo-dblib.constants.attr-datetime-convert">Pdo\Dblib::ATTR_DATETIME_CONVERT</a></code></strong> 属性は、
   整数属性の代わりにブール属性として動作するようになりました。
   したがって、<span class="methodname"><a href="pdo.setattribute.php" class="methodname">PDO::setAttribute()</a></span> を介して属性を設定し、
   <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> を介して取得する場合、
   <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> を期待または返却します。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.pdo-firebird">
  <h3 class="title">PDO_FIREBIRD</h3>

  <p class="simpara">
   <strong><code><a href="pdo.constants.php#pdo.constants.attr-autocommit">PDO::ATTR_AUTOCOMMIT</a></code></strong> 属性は、
   整数属性の代わりにブール属性として動作するようになりました。
   したがって、<span class="methodname"><a href="pdo.setattribute.php" class="methodname">PDO::setAttribute()</a></span> を介して属性を設定し、
   <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> を介して取得する場合、
   <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> を期待または返却します。
  </p>

  <p class="simpara">
   この拡張モジュールはいくつかの Firebird C++ API を公開するようになったため、
   この拡張モジュールをビルドするには C++ コンパイラが必要になりました。
   さらに、この拡張モジュールは fbclient 3.0 以上にでコンパイルする必要があります。
  </p>
 </div>

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

  <p class="simpara">
   <strong><code><a href="pdo.constants.php#pdo.constants.attr-autocommit">PDO::ATTR_AUTOCOMMIT</a></code></strong>、
   <strong><code><a href="pdo.constants.php#pdo.constants.attr-emulate-prepares">PDO::ATTR_EMULATE_PREPARES</a></code></strong>、
   <strong><code><a href="ref.pdo-mysql.php#pdo.constants.mysql-attr-direct-query">PDO::MYSQL_ATTR_DIRECT_QUERY</a></code></strong> 属性は、
   整数属性の代わりにブール属性として動作するようになりました。
   したがって、<span class="methodname"><a href="pdo.setattribute.php" class="methodname">PDO::setAttribute()</a></span> を介して属性を設定し、
   <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> を介して取得する場合、
   <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> を期待または返却します。
  </p>
 </div>

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

  <p class="simpara">
   DSN に認証情報が設定されている場合、PDO コンストラクタの引数よりも優先されるようになり、
   ドキュメントの記述に近くなりました。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.simplexml">
  <h3 class="title">SimpleXML</h3>

  <p class="simpara">
   <span class="classname"><a href="class.simplexmlelement.php" class="classname">SimpleXMLElement</a></span> は XML 要素の
   表現であるだけでなく、<span class="classname"><a href="class.recursiveiterator.php" class="classname">RecursiveIterator</a></span> でもあります。
   PHP 8.4.0 より前では、一部のメソッド(例:
   <span class="methodname"><a href="simplexmlelement.asxml.php" class="methodname">SimpleXMLElement::asXML()</a></span> や
   <span class="methodname"><a href="simplexmlelement.getname.php" class="methodname">SimpleXMLElement::getName()</a></span>)および
   それらのインスタンスの <span class="type"><a href="language.types.string.php" class="type string">string</a></span> へのキャストすると、
   暗黙的にイテレータをリセットしていました。
  </p>
  <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 /><br />$xmlString </span><span style="color: #007700">= </span><span style="color: #DD0000">"&lt;root&gt;&lt;a&gt;&lt;b&gt;1&lt;/b&gt;&lt;b&gt;2&lt;/b&gt;&lt;b&gt;3&lt;/b&gt;&lt;/a&gt;&lt;/root&gt;"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$xml </span><span style="color: #007700">= </span><span style="color: #0000BB">simplexml_load_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$xmlString</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$nodes </span><span style="color: #007700">= </span><span style="color: #0000BB">$xml</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">b</span><span style="color: #007700">;<br />foreach (</span><span style="color: #0000BB">$nodes </span><span style="color: #007700">as </span><span style="color: #0000BB">$nodeData</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"nodeData: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$nodeData </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br />    </span><span style="color: #0000BB">$xml </span><span style="color: #007700">= </span><span style="color: #0000BB">$nodes</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">asXml</span><span style="color: #007700">();<br />}</span></span></code></div>
    </div>

    <p class="simpara">
     これは無限ループを引き起こしていました。
    </p>
    <div class="example-contents screen">
<div class="cdata"><pre>
nodeData: 1
nodeData: 2
nodeData: 2
nodeData: 2
nodeData: 2
nodeData: 2
nodeData: 2
// ...
</pre></div>
    </div>
    <p class="simpara">
     しかし、この動作は修正され、
     <span class="classname"><a href="class.simplexmlelement.php" class="classname">SimpleXMLElement</a></span> は明示的に巻き戻されない限り、
     イテレータをリセットしなくなりました。
     つまり、前述の例は現在では次のようになります:
    </p>
    <div class="example-contents screen">
<div class="cdata"><pre>
nodeData: 1
nodeData: 2
nodeData: 3
</pre></div>
    </div>
   </div>
  </p>
  
 </div>

 <div class="sect2" id="migration84.incompatible.soap">
  <h3 class="title">SOAP</h3>

  <p class="simpara">
   <span class="property"><a href="class.soapclient.php#soapclient.props.typemap">SoapClient::$typemap</a></span> は、<span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span> になりました。
   <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span> を使用したチェック
   （例: <code class="code">is_resource($client-&gt;typemap)</code>)は、
   <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> かどうかのチェック（例: <code class="code">$client-&gt;typemap !== null</code>）に置き換える必要があります。
  </p>

  <p class="simpara">
   SOAP 拡張モジュールには、<a href="book.session.php" class="link">session</a> 拡張モジュールへの
   オプションの依存関係が追加されました。
   PHP が session 拡張モジュールなしでビルドされ、かつ
   <strong class="option unknown">--enable-rtld-now</strong> 構成フラグが有効になっている場合、
   <a href="book.soap.php" class="link">SOAP</a> 拡張モジュールも使用していると、
   起動時にエラーが発生します。
   これを解決するには、rtld-now を使用しないか、session 拡張モジュールを読み込んでください。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.standard">
  <h3 class="title">Standard</h3>

  <p class="simpara">
   <span class="function"><a href="function.strcspn.php" class="function">strcspn()</a></span> で
   <code class="parameter">characters</code> に空文字列を指定すると
   文字列の長さが返されるようになりました。
   以前は、最初のヌルバイトで誤って停止していました。
   
  </p>

  <p class="simpara">
   <span class="function"><a href="function.http-build-query.php" class="function">http_build_query()</a></span> は、Backed Enumを正しく処理するようになりました。
  </p>

  
  <p class="simpara">
   <span class="function"><a href="function.stream-bucket-make-writeable.php" class="function">stream_bucket_make_writeable()</a></span> および
   <span class="function"><a href="function.stream-bucket-new.php" class="function">stream_bucket_new()</a></span> は、
   <span class="classname"><a href="class.stdclass.php" class="classname">stdClass</a></span> のインスタンスではなく、
   <span class="classname"><strong class="classname">StreamBucket</strong></span> のインスタンスを返すようになりました。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.tidy">
  <h3 class="title">Tidy</h3>

  <p class="simpara">
   コンストラクタでの失敗時に、警告を発して壊れたオブジェクトになるのではなく、
   例外をスローするようになりました。
  </p>
 </div>

 <div class="sect2" id="migration84.incompatible.xml">
  <h3 class="title">XML</h3>

  <p class="simpara">
   <span class="function">xml_set_<span class="replaceable">*</span>_handler</span>
   関数は、<code class="parameter">handler</code> パラメータに対して
   <span class="type"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>|<span class="type"><a href="language.types.string.php" class="type string">string</a></span>|<span class="type"><a href="language.types.null.php" class="type null">null</a></span></span> の
   有効なシグネチャを宣言し、チェックするようになりました。
   さらに、<span class="function"><a href="function.xml-set-object.php" class="function">xml_set_object()</a></span> で設定されたオブジェクトのメソッド名に対応する
   <span class="type"><a href="language.types.string.php" class="type string">string</a></span> 型の値は、事前に渡されたオブジェクトのクラス上にメソッドが存在するかどうかが
   チェックされるようになりました。
   従って、<span class="function"><a href="function.xml-set-object.php" class="function">xml_set_object()</a></span> は、
   <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> メソッドを設定する前に呼び出す必要があります。
   ハンドラを無効にするために空文字列を渡すことは引き続き許可されていますが、
   非推奨となりました。
  </p>

  <p class="simpara">
   しかし、<span class="function"><a href="function.xml-set-object.php" class="function">xml_set_object()</a></span> と
   <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> でない文字列を渡すことは非推奨です。
   そのようなインスタンスをメソッドを直接参照する <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> に
   変更することをお勧めします。
  </p>
 </div>

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