<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration80.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'migration80.incompatible.php',
    1 => '下位互換性のない変更点',
    2 => '下位互換性のない変更点',
  ),
  'up' => 
  array (
    0 => 'migration80.php',
    1 => 'PHP 7.4.x から PHP 8.0.x への移行',
  ),
  'prev' => 
  array (
    0 => 'migration80.new-classes.php',
    1 => '新しいクラスとインターフェイス',
  ),
  'next' => 
  array (
    0 => 'migration80.deprecated.php',
    1 => '推奨されなくなる機能',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'appendices/migration80/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

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

  <div class="sect3" id="migration80.incompatible.core.string-number-comparision">
   <h4 class="title">文字列と数値の比較</h4>

   <p class="para">
    (厳密でないやり方で)数値と非数値形式の文字列を比較する場合、
    数値を文字列にキャストし、文字列と比較するようになりました。
    数値と数値形式の文字列の比較は、以前と同じ振る舞いをします。
    注意すべきなのは、これによって、
    <code class="code">0 == &quot;not-a-number&quot;</code> が <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> と見なされるようになったことです。
    <table class="doctable informaltable">
     
      <thead>
       <tr>
        <th>比較</th>
        <th>変更前</th>
        <th>変更後</th>
       </tr>

      </thead>

      <tbody class="tbody">
       <tr>
        <td><code class="code">0 == &quot;0&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">0 == &quot;0.0&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">0 == &quot;foo&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">0 == &quot;&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">42 == &quot;   42&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
       </tr>

       <tr>
        <td><code class="code">42 == &quot;42foo&quot;</code></td>
        <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
        <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
       </tr>

      </tbody>
     
    </table>

    
   </p>
  </div>

  <div class="sect3" id="migration80.incompatible.core.other">
   <h4 class="title">その他の下位互換性のない変更</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      <code class="literal">match</code> が予約語になりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="literal">mixed</code> が予約語になりました。
      よって、クラスやインターフェイス、
      トレイトの名前として使えなくなっています。
      名前空間の中であっても同様です。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      アサーションに失敗すると、デフォルトで例外をスローするようになりました。
      古い振る舞いを望む場合、php.ini で <code class="code">assert.exception=0</code> と設定できます。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      クラス名と同じ名前のメソッドは、コンストラクタと解釈されなくなりました。
      <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> メソッドを代わりに使って下さい。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      static でないメソッドを、staticメソッドとしてコールできる機能が削除されました。
      static でないメソッドをクラス名を使ってチェックした場合、
      <span class="function"><a href="function.is-callable.php" class="function">is_callable()</a></span> は失敗します。
      (オブジェクトのインスタンスを使ってチェックしなければいけません)
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="code">(real)</code> と <code class="code">(unset)</code> キャストが削除されました。
     </p>
    </li>
    <li class="listitem">
      <p class="para">
       <a href="errorfunc.configuration.php#ini.track-errors" class="link">track_errors</a> ini ディレクティブは削除されました。
       つまり、<var class="varname">php_errormsg</var> が利用できなくなったということです。
       代わりに <span class="function"><a href="function.error-get-last.php" class="function">error_get_last()</a></span> 関数が使えます。
      </p>
    </li>
    <li class="listitem">
     <p class="para">
      大文字小文字を区別しない定数を定義できる機能が削除されました。
      <span class="function"><a href="function.define.php" class="function">define()</a></span> 関数の第3引数はもはや <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ではありません。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> 関数を使ってオートローダーを指定する機能は削除されました。
      代わりに <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> を使うべきです。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.set-error-handler.php" class="function">set_error_handler()</a></span> 関数で設定されるカスタムエラーハンドラには、
      <code class="parameter">errcontext</code> 引数は渡されなくなりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.create-function.php" class="function">create_function()</a></span> 関数は削除されました。
      無名関数が代わりに使えます。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.each.php" class="function">each()</a></span> 関数は削除されました。
      代わりに <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a> や <span class="classname"><a href="class.arrayiterator.php" class="classname">ArrayIterator</a></span> を使うべきです。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="methodname"><a href="closure.fromcallable.php" class="methodname">Closure::fromCallable()</a></span> や
      <span class="methodname"><a href="reflectionmethod.getclosure.php" class="methodname">ReflectionMethod::getClosure()</a></span> を使って
      メソッドから生成されたクロージャーから
      <var class="varname">this</var> の束縛を解除できる機能は削除されました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <var class="varname">this</var> を使っている適切なクロージャーから、
      <var class="varname">this</var> の束縛を解除する機能も削除されています。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      オブジェクトに対して <span class="function"><a href="function.array-key-exists.php" class="function">array_key_exists()</a></span>
      関数を使える機能は削除されました。
      <span class="function"><a href="function.isset.php" class="function">isset()</a></span> または <span class="function"><a href="function.property-exists.php" class="function">property_exists()</a></span>
      を代わりに使えます。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.array-key-exists.php" class="function">array_key_exists()</a></span> 関数の引数 <code class="parameter">key</code>
      の型に関する振る舞いが、
      <span class="function"><a href="function.isset.php" class="function">isset()</a></span> 関数や配列アクセスの場合と一貫したものになりました。
      全てのキーの型は通常の強制が行われ、配列やオブジェクトのキーは
      <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> がスローされるようになりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      はじめの数値のキーとして <span class="replaceable">n</span> を持つ配列は、
      たとえ <span class="replaceable">n</span> が負の値であっても、
      次の暗黙のキーは <span class="replaceable">n+1</span> を使うようになります。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      デフォルトの error_reporting のレベルは <strong><code><a href="errorfunc.constants.php#constant.e-all">E_ALL</a></code></strong> になりました。
      これより前のバージョンでは、 
      <strong><code><a href="errorfunc.constants.php#constant.e-all">E_ALL</a></code></strong> から
      <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> と <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong> が除かれていました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <a href="errorfunc.configuration.php#ini.display-startup-errors" class="link">display_startup_errors</a> は、
      デフォルトで有効になりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      親クラスがないクラスの内部で <span class="type">parent</span> を使うと、
      致命的なコンパイルエラーが発生するようになりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="literal">@</code> 演算子は、致命的なエラー
      (<strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-core-error">E_CORE_ERROR</a></code></strong>,
      <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-user-error">E_USER_ERROR</a></code></strong>,
      <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-parse">E_PARSE</a></code></strong>)
      を隠さなくなりました。
      <code class="literal">@</code> を使う時に、
      error_reporting が <code class="literal">0</code> であることを期待しているエラーハンドラは、
      代わりにマスクチェックを調整すべきです:
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// こういうエラーハンドラは<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_error_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$err_no</span><span style="color: #007700">, </span><span style="color: #0000BB">$err_msg</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$linenum</span><span style="color: #007700">) {<br />    if (</span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">() == </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />        return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />    }<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">// 以下に置き換えましょう<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_error_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$err_no</span><span style="color: #007700">, </span><span style="color: #0000BB">$err_msg</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$linenum</span><span style="color: #007700">) {<br />    if (!(</span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">() &amp; </span><span style="color: #0000BB">$err_no</span><span style="color: #007700">)) {<br />        return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />    }<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      さらに、実運用環境で表示されていなかった、
      情報のリークに繋がるエラーメッセージにも注意を払うべきです。
      エラーのロギングと併せて、
      <code class="code">display_errors=Off</code> となっていることを確認するようにして下さい。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="literal">#[</code> は、コメントの開始として解釈されなくなりました。
      この文法は、アトリビュート として使われるようになっているからです。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      非互換なメソッドのシグネチャによる継承エラー(リスコフの置換原則違反)については、
      常に致命的なエラーが生成されるようになりました。
      これより前のバージョンでは、警告が生成される場合がありました。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      ビットシフトや加算、減算に対する連結演算子の優先順位が変更されました。
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Sum: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// 上記は、以前のバージョンでは以下のように解釈されていました:<br /></span><span style="color: #007700">echo (</span><span style="color: #DD0000">"Sum: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$a</span><span style="color: #007700">) + </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// PHP 8.0.0 からは、以下のように解釈されます:<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Sum:" </span><span style="color: #007700">. (</span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      実行時に <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> に解決されるデフォルト値を持つ引数は、
      引数の型を暗黙のうちに nullable とマークすることはなくなりました。
      明示的に nullable と宣言するか、
      明示的にデフォルト値を <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> と宣言しなければなりません。
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 以下のようなコードは<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">int $arg </span><span style="color: #007700">= </span><span style="color: #0000BB">CONST_RESOLVING_TO_NULL</span><span style="color: #007700">) {}<br /></span><span style="color: #FF8000">// このように置き換えるか<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(?</span><span style="color: #0000BB">int $arg </span><span style="color: #007700">= </span><span style="color: #0000BB">CONST_RESOLVING_TO_NULL</span><span style="color: #007700">) {}<br /></span><span style="color: #FF8000">// こう書きましょう<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">int $arg </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
    </li>
    <li class="listitem">
     <p class="para">
      たくさんの警告が <span class="classname"><a href="class.error.php" class="classname">Error</a></span> 例外に変換されるようになりました:
     </p>
     <p class="para">
      <ul class="simplelist">
       <li>
        オブジェクトでない値にプロパティを書き込もうとした場合。
        これより前のバージョンでは、
        <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> については stdClass オブジェクトが暗黙のうちに作られ、
        空文字列については <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> となっていました。
       </li>
       <li>
        PHP_INT_MAX キーが既に使われている配列に対して、
        要素を追加しようとした場合。
       </li>
       <li>
        不正な型(配列やオブジェクト)
        を配列のキーや文字列のオフセットとして使おうとした場合。
       </li>
       <li>スカラー値に配列のインデックスを書き込もうとした場合</li>
       <li>配列やTraversable でない値をアンパックしようとした場合</li>
       <li>
        未定義の、非修飾の定数にアクセスしようとした場合。
        これより前のバージョンでは、
        非修飾の定数にアクセスしようとすると、警告が発生し、
        文字列として解釈されていました。
       </li>
       <li>
        可変長引数でない組み込み関数に、間違った数の引数を渡した場合、
        <span class="classname"><a href="class.argumentcounterror.php" class="classname">ArgumentCountError</a></span> がスローされるようになりました。
       </li>
       <li>
        無効な countable 型を <span class="function"><a href="function.count.php" class="function">count()</a></span> に渡した場合、
        <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> がスローされるようになりました。
       </li>
      </ul>
     </p>
     <p class="para">
      多くの notice が警告に変換されるようになりました:
     </p>
     <p class="para">
      <ul class="simplelist">
       <li>未定義の変数を読み取ろうとした場合</li>
       <li>未定義のプロパティを読み取ろうとした場合</li>
       <li>未定義の配列のキーを読み取ろうとした場合</li>
       <li>オブジェクトでない値のプロパティを読み取ろうとした場合</li>
       <li>配列でない値のインデックスにアクセスしようとした場合</li>
       <li>配列を文字列に変換しようとした場合</li>
       <li>リソースを配列のキーとして使おうとした場合</li>
       <li>null や bool 値や float の値を文字列オフセットとして使おうとした場合</li>
       <li>境界を超えて文字列のオフセットを読み取ろうとした場合</li>
       <li>文字列のオフセットに空文字列を割り当てようとした場合</li>
      </ul>
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      文字列のオフセットに複数バイトを割り当てようとすると、警告が発生するようになりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      ソースファイル中に(文字列の範囲外のNUL バイトのような)
      想定外の文字が含まれていた場合、
      コンパイル時に警告を出す代わりに、
      <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span> がスローされるようになりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      例外がキャッチされなかった場合、
      &quot;クリーンなシャットダウン&quot; が行われます。
      これは、例外がキャッチされなかった後、
      デストラクタが呼ばれるということです。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      コンパイル時の致命的なエラー
      &quot;Only variables can be passed by reference&quot; は、
      実行時まで遅延され、
      &quot;Argument cannot be passed by reference&quot;
      という <span class="classname"><a href="class.error.php" class="classname">Error</a></span> 例外に変換されるようになりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      &quot;Only variables should be passed by reference&quot; という警告は、
      &quot;Argument cannot be passed by reference&quot;
      という例外に変換されるようになりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      無名クラスのために生成される名前が変更されました。
      最初の親クラスやインターフェイスの名前が含まれるようになっています:
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">new class extends </span><span style="color: #0000BB">ParentClass </span><span style="color: #007700">{};<br /></span><span style="color: #FF8000">// -&gt; ParentClass@anonymous<br /></span><span style="color: #007700">new class implements </span><span style="color: #0000BB">FirstInterface</span><span style="color: #007700">, </span><span style="color: #0000BB">SecondInterface </span><span style="color: #007700">{};<br /></span><span style="color: #FF8000">// -&gt; FirstInterface@anonymous<br /></span><span style="color: #007700">new class {};<br /></span><span style="color: #FF8000">// -&gt; class@anonymous<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      上で示した名前の後に、NULバイトやユニークなサフィックスが続きます。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      トレイトのエイリアス調整において、
      クラス名を指定していないメソッド参照は、
      曖昧でないことが必須になりました:
     </p>
     <p class="para">
      <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">X </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">T1</span><span style="color: #007700">, </span><span style="color: #0000BB">T2 </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">func </span><span style="color: #007700">as </span><span style="color: #0000BB">otherFunc</span><span style="color: #007700">;<br />    }<br />    function </span><span style="color: #0000BB">func</span><span style="color: #007700">() {}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      <code class="code">T1::func()</code> と <code class="code">T2::func()</code>
      が両方存在している場合、
      PHP 8.0.0 より前のバージョンでは、
      このコードは黙って動作し、func は
      <code class="code">T1::func</code> を参照するものと想定されていました。
      PHP 8.0.0 からは、このコードは致命的なエラーが発生します。
      <code class="code">T1::func</code> または <code class="code">T2::func</code> 
      を明示的に書く必要があります。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      トレイトで定義される抽象メソッドのシグネチャは
      それを実装するクラスのメソッド側で、
      一致しているかがチェックされるようになりました:
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">trait </span><span style="color: #0000BB">MyTrait </span><span style="color: #007700">{<br />    abstract private function </span><span style="color: #0000BB">neededByTrait</span><span style="color: #007700">(): </span><span style="color: #0000BB">string</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{<br />    use </span><span style="color: #0000BB">MyTrait</span><span style="color: #007700">;<br /><br />    </span><span style="color: #FF8000">// エラー。戻り値の型が一致しません。<br />    </span><span style="color: #007700">private function </span><span style="color: #0000BB">neededByTrait</span><span style="color: #007700">(): </span><span style="color: #0000BB">int </span><span style="color: #007700">{ return </span><span style="color: #0000BB">42</span><span style="color: #007700">; }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      無効にされている関数は、存在しない関数であるかのように扱われるようになりました。
      無効にされている関数を呼び出しても unknown と報告されますし、
      無効にされている関数を再定義することも可能になっています。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <code class="literal">data://</code> ストリームラッパーは書き込み可能ではなくなりました。
      これは、ドキュメント化されている振る舞いに一致します。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      算術演算子とビット演算子
      <code class="literal">+</code>, <code class="literal">-</code>,
      <code class="literal">*</code>, <code class="literal">/</code>,
      <code class="literal">**</code>, <code class="literal">%</code>,
      <code class="literal">&lt;&lt;</code>, <code class="literal">&gt;&gt;</code>,
      <code class="literal">&amp;</code>,
      <code class="literal">|</code>, <code class="literal">^</code>,
      <code class="literal">~</code>, <code class="literal">++</code>,
      <code class="literal">--</code> は、オペランドのひとつが配列だったり、
      <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="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> をスローするようになりました。
      これに対する唯一の例外は、配列と配列を
      <code class="literal">+</code> でマージする操作で、
      これはまだサポートされています。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      float 型から文字列型へのキャストは、
      ロケールに依存しないように常に振る舞うようになります。
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />setlocale</span><span style="color: #007700">(</span><span style="color: #0000BB">LC_ALL</span><span style="color: #007700">, </span><span style="color: #DD0000">"de_DE"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">3.14</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$f</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// PHP 8.0.0 より前のバージョン: 3,14<br />// PHP 8.0.0 以降:        3.14<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      数値のフォーマットをカスタマイズする方法については、
      <span class="function"><a href="function.printf.php" class="function">printf()</a></span>, <span class="function"><a href="function.number-format.php" class="function">number_format()</a></span> 関数
      および <span class="methodname"><strong>NumberFormatter()</strong></span> メソッドを参照ください。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      推奨されなくなっていた、
      オフセットを指定してアクセスするための波括弧のサポートが削除されました。
     </p>
     <p class="para">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 以下ではなく:<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">{</span><span style="color: #0000BB">0</span><span style="color: #007700">};<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">{</span><span style="color: #DD0000">"key"</span><span style="color: #007700">};<br /></span><span style="color: #FF8000">// このように書いて下さい:<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"key"</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      private メソッドに final 修正子を指定した場合、
      そのメソッドがコンストラクタでない限り、警告が発生するようになります。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      オブジェクトのコンストラクタで
      <span class="function"><a href="function.exit.php" class="function">exit()</a></span> が呼び出された場合、
      オブジェクトのデストラクタはコールされなくなりました。
      これは、コンストラクタが例外をスローしたときの振る舞いと一致します。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      名前空間に含まれる名前には、
      ホワイトスペースを含めることができなくなりました。
      つまり、<code class="code">Foo\Bar</code> は名前空間の名前として認識されますが
      <code class="code">Foo \ Bar</code> は認識されなくなったということです。
      逆に、予約語のキーワードは名前空間の一部として許されるようになりました。
      これによって、コードの解釈が変わるかもしれません。
      <code class="code">new\x</code> は <code class="code">constant(&#039;new\x&#039;)</code> と同じですが、
      <code class="code">new \x()</code> とは異なります。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      三項演算子をネストする場合、明示的に括弧が必要になりました。
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.debug-backtrace.php" class="function">debug_backtrace()</a></span> と
      <span class="methodname"><a href="exception.gettrace.php" class="methodname">Exception::getTrace()</a></span> メソッド
      は、引数にリファレンスを取らなくなりました。
      これにより、バックトレースを通じて、関数の引数を変更できなくなります。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      数値形式の文字列の扱いが、より直感的で間違いにくいものに変更されました。
      ホワイトスペースが前に付いている場合の扱いと一貫性を持たせるため、
      数値形式の文字列の後にホワイトスペースを付けることが許されるようになりました。
      これがもっとも影響するのは以下です:
     </p>
     <p class="para">
      <ul class="simplelist">
       <li><span class="function"><a href="function.is-numeric.php" class="function">is_numeric()</a></span> 関数</li>
       <li>文字列同士の比較</li>
       <li>型宣言</li>
       <li>インクリメントとデクリメント演算</li>
      </ul>
     </p>
     <p class="para">
      &quot;数値が始めに来る文字列&quot; の概念は殆どなくなっています;
      このケースは、移行を容易にするために存在しています。

      &quot;A non well-formed numeric value encountered&quot; という
      <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> が発生する文字列
      は、&quot;A non-numeric value encountered&quot; という
      <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> が発生するようになっています。
      そして、&quot;A non-numeric value encountered&quot; という
      <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> が発生していた全ての文字列は、
      <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> が発生するようになりました。

      これが最も影響するのは、以下の場合です:
     </p>
     <p class="para">
      <ul class="simplelist">
       <li>算術演算</li>
       <li>ビット演算</li>
      </ul>
     </p>
     <p class="para">
      この <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> から
      <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> への変更は、
      不正な文字列オフセットの場合に発生する
      &quot;Illegal string offset &#039;string&#039;&quot; という <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
      にも影響します。
      文字列から int/float に明示的にキャストする場合の振る舞いは変更されていません
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      マジックメソッドは引数と戻り値の型を持ち、
      宣言された場合はチェックが行われるようになりました。
      シグネチャは次の一覧と一致させるべきです:
     </p>
     <p class="para">
      <ul class="simplelist">
       <li><code class="code">__call(string $name, array $arguments): mixed</code></li>
       <li><code class="code">__callStatic(string $name, array $arguments): mixed</code></li>
       <li><code class="code">__clone(): void</code></li>
       <li><code class="code">__debugInfo(): ?array</code></li>
       <li><code class="code">__get(string $name): mixed</code></li>
       <li><code class="code">__invoke(mixed $arguments): mixed</code></li>
       <li><code class="code">__isset(string $name): bool</code></li>
       <li><code class="code">__serialize(): array</code></li>
       <li><code class="code">__set(string $name, mixed $value): void</code></li>
       <li><code class="code">__set_state(array $properties): object</code></li>
       <li><code class="code">__sleep(): array</code></li>
       <li><code class="code">__unserialize(array $data): void</code></li>
       <li><code class="code">__unset(string $name): void</code></li>
       <li><code class="code">__wakeup(): void</code></li>
      </ul>
      
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span> 関数に渡される
      配列のキーは、パラメータ名として解釈されるようになりました。
      これより前のバージョンでは、静かに無視されていました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      名前空間の内部で <code class="literal">assert()</code> と呼ばれる関数を宣言する
      ことは許されなくなり、
      <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong> が発生するようになりました。
      <span class="function"><a href="function.assert.php" class="function">assert()</a></span> 関数は
      PHP エンジンによって特別扱いを受けることになっているので、
      名前空間の内部で同じ名前が定義されていると、
      動作が一貫しなくなる原因になるからです。
     </p>
    </li>
   </ul>
  </div>
 </div>

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

  <p class="para">
   いくつかの <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>
  <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.curl-init.php" class="function">curl_init()</a></span> 関数は
      <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span>
      オブジェクトを返すようになりました。
      <span class="function"><a href="function.curl-close.php" class="function">curl_close()</a></span> 関数はもはや意味をなしません。
      <span class="classname"><a href="class.curlhandle.php" class="classname">CurlHandle</a></span> インスタンスは、
      参照されなくなった場合に、自動的に破棄されます。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.curl-multi-init.php" class="function">curl_multi_init()</a></span> 関数は
      <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.curlmultihandle.php" class="classname">CurlMultiHandle</a></span>
      オブジェクトを返すようになりました。
      <span class="function"><a href="function.curl-multi-close.php" class="function">curl_multi_close()</a></span> 関数はもはや意味をなしません。
      <span class="classname"><a href="class.curlmultihandle.php" class="classname">CurlMultiHandle</a></span> インスタンスは、
      参照されなくなった場合に、自動的に破棄されます。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.curl-share-init.php" class="function">curl_share_init()</a></span> 関数は
      <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.curlsharehandle.php" class="classname">CurlShareHandle</a></span>
      オブジェクトを返すようになりました。
      <span class="function"><a href="function.curl-share-close.php" class="function">curl_share_close()</a></span> 関数はもはや意味をなしません。
      <span class="classname"><a href="class.curlsharehandle.php" class="classname">CurlShareHandle</a></span> インスタンスは、
      参照されなくなった場合に、自動的に破棄されます。
     </p>
    </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-init.php" class="function">enchant_broker_init()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.enchantbroker.php" class="classname">EnchantBroker</a></span>
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-request-dict.php" class="function">enchant_broker_request_dict()</a></span> と
     <span class="function"><a href="function.enchant-broker-request-pwl-dict.php" class="function">enchant_broker_request_pwl_dict()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.enchantdictionary.php" class="classname">EnchantDictionary</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     GD 拡張モジュールは 画像の基本的なデータ構造として
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.gdimage.php" class="classname">GdImage</a></span> 
     オブジェクトを使うようになりました。
     <span class="function"><a href="function.imagedestroy.php" class="function">imagedestroy()</a></span> 関数はもはや意味をなしません。
     <span class="classname"><a href="class.gdimage.php" class="classname">GdImage</a></span> インスタンスは、
     参照されなくなった場合に、自動的に破棄されます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.openssl-x509-read.php" class="function">openssl_x509_read()</a></span> と
     <span class="function"><a href="function.openssl-csr-sign.php" class="function">openssl_csr_sign()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.opensslcertificate.php" class="classname">OpenSSLCertificate</a></span> 
     オブジェクトを返すようになりました。
     <span class="function"><a href="function.openssl-x509-free.php" class="function">openssl_x509_free()</a></span> 関数は非推奨となり、
     もはや意味をなしません。
     <span class="classname"><a href="class.opensslcertificate.php" class="classname">OpenSSLCertificate</a></span> インスタンスは、
     参照されなくなった場合に、自動的に破棄されます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.openssl-csr-new.php" class="function">openssl_csr_new()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.opensslcertificatesigningrequest.php" class="classname">OpenSSLCertificateSigningRequest</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.openssl-pkey-new.php" class="function">openssl_pkey_new()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.opensslasymmetrickey.php" class="classname">OpenSSLAsymmetricKey</a></span> 
     オブジェクトを返すようになりました。
     <span class="function"><a href="function.openssl-pkey-free.php" class="function">openssl_pkey_free()</a></span> 関数は非推奨となり、
     もはや意味をなしません。
     <span class="classname"><a href="class.opensslasymmetrickey.php" class="classname">OpenSSLAsymmetricKey</a></span> インスタンスは、
     参照されなくなった場合に、自動的に破棄されます。
    </p>
   </li>
   <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.shmop-open.php" class="function">shmop_open()</a></span> 関数は
      <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.shmop.php" class="classname">Shmop</a></span> 
      オブジェクトを返すようになりました。
      <span class="function"><a href="function.shmop-close.php" class="function">shmop_close()</a></span> 関数は非推奨となり、
      もはや意味をなしません。
      <span class="classname"><a href="class.shmop.php" class="classname">Shmop</a></span> インスタンスは、
      参照されなくなった場合に、自動的に破棄されます。
     </p>
    </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.socket-create.php" class="function">socket_create()</a></span>, <span class="function"><a href="function.socket-create-listen.php" class="function">socket_create_listen()</a></span>,
     <span class="function"><a href="function.socket-accept.php" class="function">socket_accept()</a></span>, <span class="function"><a href="function.socket-import-stream.php" class="function">socket_import_stream()</a></span>,
     <span class="function"><a href="function.socket-addrinfo-connect.php" class="function">socket_addrinfo_connect()</a></span>, <span class="function"><a href="function.socket-addrinfo-bind.php" class="function">socket_addrinfo_bind()</a></span>,
     <span class="function"><a href="function.socket-wsaprotocol-info-import.php" class="function">socket_wsaprotocol_info_import()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.socket.php" class="classname">Socket</a></span> 
     オブジェクトを返すようになりました。
     <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.addressinfo.php" class="classname">AddressInfo</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.msg-get-queue.php" class="function">msg_get_queue()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.sysvmessagequeue.php" class="classname">SysvMessageQueue</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.sem-get.php" class="function">sem_get()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.sysvsemaphore.php" class="classname">SysvSemaphore</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.shm-attach.php" class="function">shm_attach()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.sysvsharedmemory.php" class="classname">SysvSharedMemory</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.xml-parser-create.php" class="function">xml_parser_create()</a></span> と
     <span class="function"><a href="function.xml-parser-create-ns.php" class="function">xml_parser_create_ns()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.xmlparser.php" class="classname">XMLParser</a></span> 
     オブジェクトを返すようになりました。
     <span class="function"><a href="function.xml-parser-free.php" class="function">xml_parser_free()</a></span> 関数はもはや意味をなしません。
     XMLParser インスタンスは、
     参照されなくなった場合に、自動的に破棄されます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <a href="book.xmlwriter.php" class="link">XMLWriter 関数</a> は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.xmlwriter.php" class="classname">XMLWriter</a></span>
     オブジェクトを受け入れ、返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.inflate-init.php" class="function">inflate_init()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.inflatecontext.php" class="classname">InflateContext</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.deflate-init.php" class="function">deflate_init()</a></span> 関数は
     <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> ではなく、<span class="classname"><a href="class.deflatecontext.php" class="classname">DeflateContext</a></span> 
     オブジェクトを返すようになりました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.com">
  <h3 class="title">COM および .Net (Windows)</h3>

  <p class="para">
   タイプライブラリ から
   大文字小文字を区別せずに定数をインポートする機能は削除されました。
   <span class="function"><a href="function.com-load-typelib.php" class="function">com_load_typelib()</a></span> 関数の第二引数は
   もはや <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ではありません。
   <a href="com.configuration.php#ini.com.autoregister-casesensitive" class="link">com.autoregister_casesensitive</a> はもはや無効ではなくなりました。
   つまり、<a href="com.configuration.php#ini.com.typelib-file" class="link">com.typelib_file</a>
   の #case_insensitive マーカーは無視されます。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.curl">
  <h3 class="title">CURL</h3>

  <p class="para">
   <strong><code><a href="curl.constants.php#constant.curlopt-postfields">CURLOPT_POSTFIELDS</a></code></strong> は、
   オブジェクトを配列として受け入れなくなりました。
   オブジェクトを配列として解釈させるためには、
   明示的に <code class="code">(array)</code> キャストを行って下さい。
   配列を受け入れる他のオプションにも、同じことが当てはまります。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.datetime">
  <h3 class="title">日付と時刻</h3>

  <p class="para">
   <span class="function"><a href="function.mktime.php" class="function">mktime()</a></span> と
   <span class="function"><a href="function.gmmktime.php" class="function">gmmktime()</a></span> 関数は
   少なくともひとつ引数が必要になりました。
   現在のタイムスタンプを取得する用途には
   <span class="function"><a href="function.time.php" class="function">time()</a></span> 関数が使えます。
  </p>
 </div>

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

  <p class="para">
   DOM 拡張モジュールで実装されておらず、振る舞いも持たず、
   テストデータもないクラスが削除されました。
   これらのクラスは、最新のDOM標準からも削除されています:
  </p>
  <p class="para">
   <ul class="simplelist">
    <li><span class="classname"><strong class="classname">DOMNameList</strong></span></li>
    <li><span class="classname"><strong class="classname">DomImplementationList</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMConfiguration</strong></span></li>
    <li><span class="classname"><strong class="classname">DomError</strong></span></li>
    <li><span class="classname"><strong class="classname">DomErrorHandler</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMImplementationSource</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMLocator</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMUserDataHandler</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMTypeInfo</strong></span></li>
    <li><span class="classname"><strong class="classname">DOMStringExtend</strong></span></li>
   </ul>
  </p>
  <p class="para">
   DOM 拡張モジュールで実装されておらず、
   振る舞いも持たない以下のメソッドが削除されました:
  </p>
  <p class="para">
   <ul class="simplelist">
    <li><span class="methodname"><strong>DOMNamedNodeMap::setNamedItem()</strong></span></li>
    <li><span class="methodname"><strong>DOMNamedNodeMap::removeNamedItem()</strong></span></li>
    <li><span class="methodname"><strong>DOMNamedNodeMap::setNamedItemNS()</strong></span></li>
    <li><span class="methodname"><strong>DOMNamedNodeMap::removeNamedItemNS()</strong></span></li>
    <li><span class="methodname"><strong>DOMText::replaceWholeText()</strong></span></li>
    <li><span class="methodname"><a href="domnode.comparedocumentposition.php" class="methodname">DOMNode::compareDocumentPosition()</a></span></li>
    <li><span class="methodname"><a href="domnode.isequalnode.php" class="methodname">DOMNode::isEqualNode()</a></span></li>
    <li><span class="methodname"><strong>DOMNode::getFeature()</strong></span></li>
    <li><span class="methodname"><strong>DOMNode::setUserData()</strong></span></li>
    <li><span class="methodname"><strong>DOMNode::getUserData()</strong></span></li>
    <li><span class="methodname"><strong>DOMDocument::renameNode()</strong></span></li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.enchant">
  <h3 class="title">Enchant</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-list-dicts.php" class="function">enchant_broker_list_dicts()</a></span>,
     <span class="function"><a href="function.enchant-broker-describe.php" class="function">enchant_broker_describe()</a></span>,
     <span class="function"><a href="function.enchant-dict-suggest.php" class="function">enchant_dict_suggest()</a></span> 関数は、
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> ではなく、空の配列を返すようになりました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.exif">
  <h3 class="title">Exif</h3>

  <p class="para">
   <span class="function"><a href="function.read-exif-data.php" class="function">read_exif_data()</a></span> 関数は削除されました。
   <span class="function"><a href="function.exif-read-data.php" class="function">exif_read_data()</a></span> 関数を代わりに使うべきです。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.filter">
  <h3 class="title">フィルタ</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <strong><code><a href="filter.constants.php#constant.filter-validate-url">FILTER_VALIDATE_URL</a></code></strong>  フラグのための定数
     <strong><code><a href="filter.constants.php#constant.filter-flag-scheme-required">FILTER_FLAG_SCHEME_REQUIRED</a></code></strong> と
     <strong><code><a href="filter.constants.php#constant.filter-flag-host-required">FILTER_FLAG_HOST_REQUIRED</a></code></strong> が削除されました。
     <code class="literal">scheme</code>
     と <code class="literal">host</code> は（かつてもそうでしたが) 常に必須です。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.filter-input.php" class="function">filter_input()</a></span> 関数などで使われている定数
     <strong><code><a href="filter.constants.php#constant.input-request">INPUT_REQUEST</a></code></strong> と <strong><code><a href="filter.constants.php#constant.input-session">INPUT_SESSION</a></code></strong>
     は削除されました。
     これらは実装されたことがなく、使うと常に警告が発生していました。
    </p> 
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.gd">
  <h3 class="title">GD</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     推奨されなくなっていた <span class="function"><a href="function.image2wbmp.php" class="function">image2wbmp()</a></span> 関数は削除されました。 
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     推奨されなくなっていた関数
     <span class="function"><a href="function.png2wbmp.php" class="function">png2wbmp()</a></span> と <span class="function"><a href="function.jpeg2wbmp.php" class="function">jpeg2wbmp()</a></span>
     が削除されました。
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.imagecropauto.php" class="function">imagecropauto()</a></span> 関数の
     <code class="parameter">mode</code> 引数のデフォルトは
     <code class="literal">-1</code> ではなくなりました。
     <strong><code><a href="image.constants.php#constant.img-crop-default">IMG_CROP_DEFAULT</a></code></strong> を代わりに使うべきです。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Windows では、<var class="filename">php_gd2.dll</var> の名前が、<var class="filename">php_gd.dll</var> に変更されました。
    </p>
   </li>
  </ul>
 </div>

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

  <p class="para">
   <span class="function"><a href="function.gmp-random.php" class="function">gmp_random()</a></span> 関数は削除されました。
   <span class="function"><a href="function.gmp-random-range.php" class="function">gmp_random_range()</a></span> や
   <span class="function"><a href="function.gmp-random-bits.php" class="function">gmp_random_bits()</a></span> 関数を代わりに使うべきです。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.iconv">
  <h3 class="title">Iconv</h3>

  <p class="para">
   エラーが発生した時に
   <var class="varname">errno</var> を適切に設定していなかった
   iconv の実装はもはやサポートされなくなりました。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.imap">
  <h3 class="title">IMAP</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.imap-headerinfo.php" class="function">imap_headerinfo()</a></span> 関数で
     未使用になっていた <code class="parameter">default_host</code> 引数が削除されました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.imap-headerinfo.php" class="function">imap_headerinfo()</a></span> 関数のエイリアスだった
     <span class="function"><a href="function.imap-header.php" class="function">imap_header()</a></span> 関数は削除されました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.intl">
  <h3 class="title">国際化関数</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     推奨されなくなっていた定数
     <strong><code><a href="intl.constants.php#constant.intl-idna-variant-2003">INTL_IDNA_VARIANT_2003</a></code></strong> が削除されました。
     
    </p>
   </li>
   <li class="listitem">
   <p class="para">
    推奨されなくなっていた定数
    <strong><code>Normalizer::NONE</code></strong> が削除されました。
   </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.ldap">
  <h3 class="title">LDAP</h3>

  <ul class="itemizedlist">
   <li class="listitem">
   <p class="para">
    推奨されなくなっていた関数
    <span class="function"><a href="function.ldap-sort.php" class="function">ldap_sort()</a></span>,
    <span class="function"><a href="function.ldap-control-paged-result.php" class="function">ldap_control_paged_result()</a></span>,
    <span class="function"><a href="function.ldap-control-paged-result-response.php" class="function">ldap_control_paged_result_response()</a></span> は削除されました。
   </p>
  </li>
  <li class="listitem">
   <p class="para">
    <span class="function"><a href="function.ldap-set-rebind-proc.php" class="function">ldap_set_rebind_proc()</a></span> のインターフェイスが変更されました。
    <code class="parameter">callback</code> 引数は空文字列を受け入れなくなりました。
    <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を代わりに使うべきです。
   </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.mbstring">
  <h3 class="title">マルチバイト文字列</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     INI ディレクティブ
     <a href="mbstring.configuration.php#ini.mbstring.func-overload" class="link">mbstring.func_overload</a>
     は削除されました。
     関連する定数
     <strong><code><a href="mbstring.constants.php#constant.mb-overload-mail">MB_OVERLOAD_MAIL</a></code></strong>,
     <strong><code><a href="mbstring.constants.php#constant.mb-overload-string">MB_OVERLOAD_STRING</a></code></strong>,
     <strong><code><a href="mbstring.constants.php#constant.mb-overload-regex">MB_OVERLOAD_REGEX</a></code></strong> も削除されています。
     <span class="function"><a href="function.mb-get-info.php" class="function">mb_get_info()</a></span> 関数の
     <code class="literal">&quot;func_overload&quot;</code> と
     <code class="literal">&quot;func_overload_list&quot;</code> エントリも削除されています。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-parse-str.php" class="function">mb_parse_str()</a></span> は、
     結果の配列を指定しないと使えなくなりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     たくさんの mbregex の関数エイリアスが削除されました。
     どの関数を代わりに使うべきなのかは、以下の一覧を参照ください:
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><span class="function"><strong>mbregex_encoding()</strong></span> → <span class="function"><a href="function.mb-regex-encoding.php" class="function">mb_regex_encoding()</a></span></li>
      <li><span class="function"><strong>mbereg()</strong></span> → <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span></li>
      <li><span class="function"><strong>mberegi()</strong></span> → <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span></li>
      <li><span class="function"><strong>mbereg_replace()</strong></span> → <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span></li>
      <li><span class="function"><strong>mberegi_replace()</strong></span> → <span class="function"><a href="function.mb-eregi-replace.php" class="function">mb_eregi_replace()</a></span></li>
      <li><span class="function"><strong>mbsplit()</strong></span> → <span class="function"><a href="function.mb-split.php" class="function">mb_split()</a></span></li>
      <li><span class="function"><strong>mbereg_match()</strong></span> → <span class="function"><a href="function.mb-ereg-match.php" class="function">mb_ereg_match()</a></span></li>
      <li><span class="function"><strong>mbereg_search()</strong></span> → <span class="function"><a href="function.mb-ereg-search.php" class="function">mb_ereg_search()</a></span></li>
      <li><span class="function"><strong>mbereg_search_pos()</strong></span> → <span class="function"><a href="function.mb-ereg-search-pos.php" class="function">mb_ereg_search_pos()</a></span></li>
      <li><span class="function"><strong>mbereg_search_regs()</strong></span> → <span class="function"><a href="function.mb-ereg-search-regs.php" class="function">mb_ereg_search_regs()</a></span></li>
      <li><span class="function"><strong>mbereg_search_init()</strong></span> → <span class="function"><a href="function.mb-ereg-search-init.php" class="function">mb_ereg_search_init()</a></span></li>
      <li><span class="function"><strong>mbereg_search_getregs()</strong></span> → <span class="function"><a href="function.mb-ereg-search-getregs.php" class="function">mb_ereg_search_getregs()</a></span></li>
      <li><span class="function"><strong>mbereg_search_getpos()</strong></span> → <span class="function"><a href="function.mb-ereg-search-getpos.php" class="function">mb_ereg_search_getpos()</a></span></li>
      <li><span class="function"><strong>mbereg_search_setpos()</strong></span> → <span class="function"><a href="function.mb-ereg-search-setpos.php" class="function">mb_ereg_search_setpos()</a></span></li>
     </ul>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span> 関数の
     <code class="literal">e</code> 修正子が削除されました。
     <span class="function"><a href="function.mb-ereg-replace-callback.php" class="function">mb_ereg_replace_callback()</a></span> 関数を代わりに使って下さい。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span> 関数に文字列でないパターン引数を渡すと、
     ASCII コードポイントではなく、文字列として解釈されるようになりました。
     以前のバージョンの振る舞いは、
     明示的に <span class="function"><a href="function.chr.php" class="function">chr()</a></span> 関数を呼び出すことで復元できます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-strpos.php" class="function">mb_strpos()</a></span>,
     <span class="function"><a href="function.mb-strrpos.php" class="function">mb_strrpos()</a></span>, <span class="function"><a href="function.mb-stripos.php" class="function">mb_stripos()</a></span>,
     <span class="function"><a href="function.mb-strripos.php" class="function">mb_strripos()</a></span>, <span class="function"><a href="function.mb-strstr.php" class="function">mb_strstr()</a></span>,
     <span class="function"><a href="function.mb-stristr.php" class="function">mb_stristr()</a></span>, <span class="function"><a href="function.mb-strrchr.php" class="function">mb_strrchr()</a></span>,
     <span class="function"><a href="function.mb-strrichr.php" class="function">mb_strrichr()</a></span> 関数の
     <code class="parameter">needle</code> 引数は、空に出来るようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-decode-numericentity.php" class="function">mb_decode_numericentity()</a></span>
     関数で内部的に使われていなかった
     引数 <code class="parameter">is_hex</code> は削除されました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-strrpos.php" class="function">mb_strrpos()</a></span> 関数の第三引数に、
     オフセットではなくエンコーディングを渡していた古い振る舞いは削除されました。
     明示的にオフセットに
     <code class="literal">0</code> を渡し、
     第四引数にエンコーディングを渡す方法を代わりに使うべきです。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     文字エンコーディング <code class="literal">ISO_8859-*</code> のエイリアスは
     <code class="literal">ISO8859-*</code> に置き換えられました。
     これは、iconv 拡張モジュールと相互運用性を向上させるためです。
     アンダースコア付きの mbregex の ISO 8859 aliases
     (<code class="literal">ISO_8859_*</code> と <code class="literal">ISO8859_*</code>)
     も削除されています。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> と
     <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> 関数は、
     マッチに成功した場合に <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>  を返すようになりました。
     これより前のバージョンでは、
     <code class="parameter">matches</code> が渡されなかった場合に
     整数 <code class="literal">1</code> が返されていました。
     <code class="parameter">matches</code> が渡された場合には
     <code class="code">max(1, strlen($matches[0]))</code> が返されていました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.oci8">
  <h3 class="title">OCI8</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="classname"><strong class="classname">OCI-Lob</strong></span> クラスは
     <span class="classname"><a href="class.ocilob.php" class="classname">OCILob</a></span> と呼ばれるようになり、
     <span class="classname"><strong class="classname">OCI-Collection</strong></span> クラスは
     <span class="classname"><a href="class.ocicollection.php" class="classname">OCICollection</a></span> と呼ばれるようになりました。
     これは、PHP 8 の arginfo 型アノテーションツールの
     名前に関する規約で強制されたものです。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     いくつかの関数エイリアスが推奨されなくなりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.oci-internal-debug.php" class="function">oci_internal_debug()</a></span> 関数と
     そのエイリアス <span class="function"><a href="function.ociinternaldebug.php" class="function">ociinternaldebug()</a></span> は削除されました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.odbc">
  <h3 class="title">ODBC</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.odbc-connect.php" class="function">odbc_connect()</a></span> 関数は
     接続を使い回さなくなりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.odbc-exec.php" class="function">odbc_exec()</a></span> 関数で使われていなかった
     <code class="parameter">flags</code> 引数が削除されました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.openssl">
  <h3 class="title">OpenSSL</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.openssl-seal.php" class="function">openssl_seal()</a></span> と
     <span class="function"><a href="function.openssl-open.php" class="function">openssl_open()</a></span> 関数には
     <code class="parameter">method</code> を渡すことが必須になりました。
     なぜなら、以前のデフォルト値 <code class="literal">&quot;RC4&quot;</code>
     はセキュアでないと見なされているからです。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.pcre">
  <h3 class="title">正規表現 (Perl互換)</h3>

  <p class="para">
   不正なエスケープシーケンスを渡した場合、
   もはやリテラルと解釈されなくなりました。
   リテラルと解釈する振る舞いは <code class="literal">X</code> 修正子で必須でしたが、
   無視されるようになっています。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.pdo">
  <h3 class="title">PHP Data Objects(PDO)</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     デフォルトのエラーハンドリングのモードが
     &quot;silent&quot; から &quot;exceptions&quot; に変更されました。
     詳細は <a href="pdo.error-handling.php" class="link">Errors とエラーハンドリング</a> を参照ください。
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     いくつかの PDOクラスのメソッドシグネチャが変更されました:
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">PDO::query(string $query, ?int $fetchMode  = null, mixed  ...$fetchModeArgs)</code></li>
      <li><code class="code">PDOStatement::setFetchMode(int $mode, mixed ...$args)</code></li>
     </ul>
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.pdo-odbc">
  <h3 class="title">PDO ODBC</h3>

  <p class="para">
   <var class="filename">php.ini</var> ディレクティブ
   <a href="ref.pdo-odbc.php#ini.pdo-odbc.db2-instance-name" class="link">pdo_odbc.db2_instance_name</a> は削除されました。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.pdo-mysql">
  <h3 class="title">PDO MySQL</h3>

  <p class="para">
   <span class="methodname"><a href="pdo.intransaction.php" class="methodname">PDO::inTransaction()</a></span> は、
   PDO が管理しているおおよその情報ではなく、
   実際のトランザクションの状態を報告するようになりました。
   クエリが &quot;暗黙のコミット&quot; に依存していた場合、
   <span class="methodname"><a href="pdo.intransaction.php" class="methodname">PDO::inTransaction()</a></span> は後に <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を返します。
   なぜなら、トランザクションが既にアクティブではないからです。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.pgsql">
  <h3 class="title">PostgreSQL</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.pg-connect.php" class="function">pg_connect()</a></span> 関数で
     推奨されなくなっていた、
     接続文字列の代わりに複数の引数を受け入れる文法は
     もはやサポートされなくなりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     推奨されなくなっていた
     <span class="function"><a href="function.pg-lo-import.php" class="function">pg_lo_import()</a></span> と
     <span class="function"><a href="function.pg-lo-export.php" class="function">pg_lo_export()</a></span> 関数の、
     最後の引数で接続を渡すシグネチャはサポートされなくなりました。
     代わりに、接続は最初の引数で渡すべきです。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.pg-fetch-all.php" class="function">pg_fetch_all()</a></span> 関数
     は 結果セットの行が0行の場合に、<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ではなく空の配列を返すようになりました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.phar">
  <h3 class="title">Phar</h3>

  <p class="para">
   phar に関連付けられたメタデータは、自動的にアンシリアライズされなくなりました。
   これは、オブジェクトのインスタンス化やオートローディングなどに起因する、
   潜在的なセキュリティ上の脆弱性を修正するためです。
   
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.reflection">
  <h3 class="title">リフレクション</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     メソッドシグネチャに関する変更
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">ReflectionClass::newInstance($args)</code></li>
      <li><code class="code">ReflectionFunction::invoke($args)</code></li>
      <li><code class="code">ReflectionMethod::invoke($object, $args)</code></li>
     </ul>
    </p>
    <p class="para">
     は、以下のように変更されました:
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">ReflectionClass::newInstance(...$args)</code></li>
      <li><code class="code">ReflectionFunction::invoke(...$args)</code></li>
      <li><code class="code">ReflectionMethod::invoke($object, ...$args)</code></li>
     </ul>
    </p>
    <p class="para">
     PHP 7 と PHP 8 の間で互換性を保たなければならないコードは、
     両方のバージョンで互換性を取るために、以下のようなシグネチャが使えます:
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">ReflectionClass::newInstance($arg = null, ...$args)</code></li>
      <li><code class="code">ReflectionFunction::invoke($arg = null, ...$args)</code></li>
      <li><code class="code">ReflectionMethod::invoke($object, $arg = null, ...$args)</code></li>
     </ul>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="reflectiontype.tostring.php" class="methodname">ReflectionType::__toString()</a></span> メソッドは、
     完全な型のデバッグ用の文字列表現を返すようになり、非推奨ではなくなりました。
     特に、nullable な型に対しては、nullを代入できることを示す情報が含まれるようになります。
     戻り値のフォーマットは安定しておらず、PHP のバージョンによって変わる可能性があります。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     リフレクションの export() メソッドは削除されました。
     代わりに、リフレクションオブジェクトを文字列にキャストすることができます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="reflectionmethod.isconstructor.php" class="methodname">ReflectionMethod::isConstructor()</a></span> と
     <span class="methodname"><a href="reflectionmethod.isdestructor.php" class="methodname">ReflectionMethod::isDestructor()</a></span> メソッドは
     インターフェイスの
     <a href="language.oop5.decon.php#object.construct" class="link">__construct()</a> と
     <a href="language.oop5.decon.php#object.destruct" class="link">__destruct()</a> についても <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> を返すようになりました。
     これより前のバージョンでは、クラスとトレイトのメソッドに対してだけ <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> を返していました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><strong>ReflectionType::isBuiltin()</strong></span> メソッドは、
     <span class="classname"><a href="class.reflectionnamedtype.php" class="classname">ReflectionNamedType</a></span> クラスに移動しました。
     <span class="classname"><a href="class.reflectionuniontype.php" class="classname">ReflectionUnionType</a></span> クラスには存在しなくなっています。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.sockets">
  <h3 class="title">Sockets</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     推奨されなくなっていた
     <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span> 関数の
     <code class="parameter">flags</code> に指定する
     <strong><code>AI_IDN_ALLOW_UNASSIGNED</code></strong> および
     <strong><code>AI_IDN_USE_STD3_ASCII_RULES</code></strong> は削除されました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.spl">
  <h3 class="title">Standard PHP Library (SPL)</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="splfileobject.fgetss.php" class="methodname">SplFileObject::fgetss()</a></span> メソッドは削除されました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="splfileobject.seek.php" class="methodname">SplFileObject::seek()</a></span> は、
     常に行の先頭にシークするようになりました。
     これより前のバージョンでは、
     <code class="literal">&gt;=1</code> を position に指定すると、次の行の先頭を探していました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="splheap.compare.php" class="methodname">SplHeap::compare()</a></span> 
     はメソッドシグネチャを指定するようになりました。
     このメソッドを実装する継承先のクラスは、
     互換性のあるメソッドシグネチャを持たなければなりません。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="spldoublylinkedlist.push.php" class="methodname">SplDoublyLinkedList::push()</a></span>,
     <span class="methodname"><a href="spldoublylinkedlist.unshift.php" class="methodname">SplDoublyLinkedList::unshift()</a></span> および
     <span class="methodname"><a href="splqueue.enqueue.php" class="methodname">SplQueue::enqueue()</a></span> は、<strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ではなく
     <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> を返すようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> 関数は、
     引数が不正な場合には常に <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> を発生させるようになりました。
     よって、2番目の引数 <code class="parameter">do_throw</code> は無視され、
     <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を設定すると、警告が発生します。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="classname"><a href="class.splfixedarray.php" class="classname">SplFixedArray</a></span> クラスは
     <span class="interfacename"><a href="class.iterator.php" class="interfacename">Iterator</a></span> ではなく
     <span class="interfacename"><a href="class.iteratoraggregate.php" class="interfacename">IteratorAggregate</a></span> を実装しました。

     <span class="methodname"><a href="splfixedarray.rewind.php" class="methodname">SplFixedArray::rewind()</a></span>,
     <span class="methodname"><a href="splfixedarray.current.php" class="methodname">SplFixedArray::current()</a></span>,
     <span class="methodname"><a href="splfixedarray.key.php" class="methodname">SplFixedArray::key()</a></span>,
     <span class="methodname"><a href="splfixedarray.next.php" class="methodname">SplFixedArray::next()</a></span>,
     <span class="methodname"><a href="splfixedarray.valid.php" class="methodname">SplFixedArray::valid()</a></span> は削除されました。

     代替として、<span class="methodname"><a href="splfixedarray.getiterator.php" class="methodname">SplFixedArray::getIterator()</a></span>
     が追加されました。

     SplFixedArray を通じて明示的にイテレーションを行うあらゆるコードは、
     <span class="methodname"><a href="splfixedarray.getiterator.php" class="methodname">SplFixedArray::getIterator()</a></span> メソッドを使い
     <span class="interfacename"><a href="class.iterator.php" class="interfacename">Iterator</a></span> を取得しなければなりません。

     これは、<span class="classname"><a href="class.splfixedarray.php" class="classname">SplFixedArray</a></span>
     がネストされたループ中で安全に使えるようになったということです。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.standard">
  <h3 class="title">標準ライブラリ</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.assert.php" class="function">assert()</a></span> 関数は
     文字列の引数を評価しなくなりました。
     代わりに、他の引数と同じように扱われます。
     <code class="code">assert(&#039;$a == $b&#039;)</code> ではなく
     <code class="code">assert($a == $b)</code> を使うべきです。

     INI ディレクティブ <a href="info.configuration.php#ini.assert.quiet-eval" class="link">assert.quiet_eval</a> と
     定数 <strong><code><a href="info.constants.php#constant.assert-quiet-eval">ASSERT_QUIET_EVAL</a></code></strong> も削除されました。
     なぜなら、もはや何の効果も無いからです。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.parse-str.php" class="function">parse_str()</a></span> は、
     結果の配列を指定しなければ使えなくなりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <a href="filters.string.php#filters.string.strip_tags" class="link">string.strip_tags</a> フィルタは削除されました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>,
     <span class="function"><a href="function.strrpos.php" class="function">strrpos()</a></span>,
     <span class="function"><a href="function.stripos.php" class="function">stripos()</a></span>,
     <span class="function"><a href="function.strripos.php" class="function">strripos()</a></span>,
     <span class="function"><a href="function.strstr.php" class="function">strstr()</a></span>,
     <span class="function"><a href="function.strchr.php" class="function">strchr()</a></span>,
     <span class="function"><a href="function.strrchr.php" class="function">strrchr()</a></span>,
     <span class="function"><a href="function.stristr.php" class="function">stristr()</a></span> 関数の
     <code class="parameter">needle</code>
     引数は常に文字列として解釈されるようになりました。
     これより前のバージョンでは、
     文字列でない引数は ASCII コードポイントと解釈されていました。
     <span class="function"><a href="function.chr.php" class="function">chr()</a></span> 関数を明示的に呼ぶことで、
     以前の振る舞いを復元できます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.strpos.php" class="function">strpos()</a></span>,
     <span class="function"><a href="function.strrpos.php" class="function">strrpos()</a></span>,
     <span class="function"><a href="function.stripos.php" class="function">stripos()</a></span>,
     <span class="function"><a href="function.strripos.php" class="function">strripos()</a></span>,
     <span class="function"><a href="function.strstr.php" class="function">strstr()</a></span>,
     <span class="function"><a href="function.stristr.php" class="function">stristr()</a></span>,
     <span class="function"><a href="function.strrchr.php" class="function">strrchr()</a></span> 関数の
     <code class="parameter">needle</code> 引数は、空に出来るようになりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.substr.php" class="function">substr()</a></span>,
     <span class="function"><a href="function.substr-count.php" class="function">substr_count()</a></span>,
     <span class="function"><a href="function.substr-compare.php" class="function">substr_compare()</a></span>,
     <span class="function"><a href="function.iconv-substr.php" class="function">iconv_substr()</a></span> 関数の
     <code class="parameter">length</code> 引数は <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> も指定できるようになりました。
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を指定した場合、
     length 引数が指定されなかったことと同じように振る舞います。
     よって、この場合、空文字列ではなく、残りの文字列を返します。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.array-splice.php" class="function">array_splice()</a></span> 関数の
     <code class="parameter">length</code> 引数は <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> も指定できるようになりました。
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を指定した場合、引数を省略した場合と同じ振る舞いをします。
     よって、<code class="parameter">offset</code>
     から配列の最後までの全ての要素を削除する動きになります。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.vsprintf.php" class="function">vsprintf()</a></span>,
     <span class="function"><a href="function.vfprintf.php" class="function">vfprintf()</a></span>,
     <span class="function"><a href="function.vprintf.php" class="function">vprintf()</a></span> 関数の
     <code class="parameter">args</code> 引数は、配列であることが必須になりました。
     これより前のバージョンでは、あらゆる型の値を受け入れていました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> 関数の
     <code class="literal">&#039;salt&#039;</code> オプションはサポートされなくなりました。
     <code class="literal">&#039;salt&#039;</code> オプションを使うと警告が生成され、
     指定された salt は無視されます。
     そして生成された salt が代わりに使われます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.quotemeta.php" class="function">quotemeta()</a></span> 関数は、空文字列を渡すと空文字列を返すようになりました。
     これより前のバージョンでは、<strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を返していました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     以下の関数は削除されました:
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><span class="function"><a href="function.hebrevc.php" class="function">hebrevc()</a></span></li>
      <li><span class="function"><a href="function.convert-cyr-string.php" class="function">convert_cyr_string()</a></span></li>
      <li><span class="function"><a href="function.money-format.php" class="function">money_format()</a></span></li>
      <li><span class="function"><a href="function.ezmlm-hash.php" class="function">ezmlm_hash()</a></span></li>
      <li><span class="function"><a href="function.restore-include-path.php" class="function">restore_include_path()</a></span></li>
      <li><span class="function"><a href="function.get-magic-quotes-gpc.php" class="function">get_magic_quotes_gpc()</a></span></li>
      <li><span class="function"><a href="function.get-magic-quotes-runtime.php" class="function">get_magic_quotes_runtime()</a></span></li>
      <li><span class="function"><a href="function.fgetss.php" class="function">fgetss()</a></span></li>
     </ul>
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     定数 <strong><code><a href="filter.constants.php#constant.filter-sanitize-magic-quotes">FILTER_SANITIZE_MAGIC_QUOTES</a></code></strong> は削除されました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
    <code class="code">($pieces,
     $glue)</code> のような形で、<span class="function"><a href="function.implode.php" class="function">implode()</a></span>
     関数を逆の引数の順番で呼ぶことはサポートされなくなりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.parse-url.php" class="function">parse_url()</a></span> 関数は、
    query および fragment が存在しないことと、空であることを区別するようになりました:
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><code class="code">http://example.com/foo → query = null, fragment = null</code></li>
      <li><code class="code">http://example.com/foo? → query = &quot;&quot;,   fragment = null</code></li>
      <li><code class="code">http://example.com/foo# → query = null, fragment = &quot;&quot;</code></li>
      <li><code class="code">http://example.com/foo?# → query = &quot;&quot;,   fragment = &quot;&quot;</code></li>
     </ul>
      これより前のバージョンでは、上の全ての場合で、query と fragment の値が <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> になっていました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span> と
     <span class="function"><a href="function.debug-zval-dump.php" class="function">debug_zval_dump()</a></span> 関数は
     INIディレクティブ <a href="ini.core.php#ini.precision" class="link">precision</a>
     ではなく
     <a href="ini.core.php#ini.serialize-precision" class="link">serialize_precision</a>
     を使って浮動小数点を印字するようになりました。
     デフォルトの設定では、浮動小数点はこのデバッグ関数によって
     全精度で印字されるようになるということです。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <a href="language.oop5.magic.php#object.sleep" class="link">__sleep()</a> が返す
     配列に存在しないプロパティが含まれていた場合、
     静かに無視されるようになりました。
     これより前のバージョンでは、
     そうしたプロパティは値 <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を持つかのようにシリアライズされていました。 
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     デフォルトの起動時のロケールは、常に
     <code class="literal">&quot;C&quot;</code> になりました。
     デフォルトでは、どのロケールからも環境を継承しません。
     これより前のバージョンでは、
     <strong><code><a href="string.constants.php#constant.lc-all">LC_ALL</a></code></strong> は
     <code class="literal">&quot;C&quot;</code> に設定されていましたが、
     <strong><code><a href="string.constants.php#constant.lc-ctype">LC_CTYPE</a></code></strong> は環境から情報を継承していました。
     しかしながら、関数によっては、明示的に
     <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span> を呼び出さないと
     継承した環境を尊重しないものもあります。
     ロケールをデフォルトから変えるためには、
     <span class="function"><a href="function.setlocale.php" class="function">setlocale()</a></span> 関数を明示的に呼ぶことが常に必須になりました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     非推奨になっていた
     <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span> 関数が
     DES にフォールバックする振る舞いが削除されました。
     不明な salt フォーマットを <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span> 関数に渡すと、
     弱い DES ハッシュにフォールバックするのではなく、
     <code class="literal">*0</code> という値になり、失敗するようになります。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span> 関数に、
     SHA256/SHA512 の範囲外の round を指定すると、
     最も近い境界値に切り詰めるのではなく、
     <code class="literal">*0</code> という値になり、失敗するようになりました。
     これは、glibc の振る舞いと一致します。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     配列に比較結果が等しい要素が含まれている場合、ソートを行う関数の結果が変わる可能性があります。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     コールバックを受け入れるあらゆる関数のうち、
     リファレンスの引数を受け入れるように明示的に指定して「いない」
     ものに対し、
     リファレンスを使ったコールバックを渡すと警告が発生するようになりました。
     例としては、
     <span class="function"><a href="function.array-filter.php" class="function">array_filter()</a></span> や
     <span class="function"><a href="function.array-reduce.php" class="function">array_reduce()</a></span> 関数があります。
     これらでほとんどの関数の例を示していますが、全てではありません。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.file-get-contents.php" class="function">file_get_contents()</a></span> 関数のように、
     関数が使うHTTPストリームラッパーは、
     デフォルトで HTTP/1.0 ではなく、
     HTTP/1.1 を指定するようになりました。
     これによって、クライアントの振る舞いが変わるわけではありませんが、
     サーバーが異なるレスポンスを返す可能性があります。
     古い振る舞いをさせるには、
     以下のようにして <code class="literal">&#039;protocol_version&#039;</code>
     ストリームコンテキストオプションを設定して下さい。
    </p>
    <p class="para">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$ctx </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">([</span><span style="color: #DD0000">'http' </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'protocol_version' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'1.0'</span><span style="color: #007700">]]);<br />echo </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://example.org'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </p>
   </li>
   <li class="listitem">
    <p class="para">
     明示的に salt を指定せず
     <span class="function"><a href="function.crypt.php" class="function">crypt()</a></span> 関数を呼ぶことはサポートされなくなりました。
     自動的に生成される salt で強いハッシュを生成したい場合、
     代わりに <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span> を使って下さい。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
    <span class="function"><a href="function.substr.php" class="function">substr()</a></span>,
    <span class="function"><a href="function.mb-substr.php" class="function">mb_substr()</a></span>,
    <span class="function"><a href="function.iconv-substr.php" class="function">iconv_substr()</a></span>,
    <span class="function"><a href="function.grapheme-substr.php" class="function">grapheme_substr()</a></span> 関数は、
    文字列の境界を越えたオフセットを一貫した形で処理するようになりました。
    これより前のバージョンでは、空文字列ではなく <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を返す場合がありました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Windows では、
     シェルを使い、プログラムを実行する関数
     (<span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span>, <span class="function"><a href="function.exec.php" class="function">exec()</a></span>,
     <span class="function"><a href="function.popen.php" class="function">popen()</a></span> など) は、
     一貫して <strong class="command">%comspec% /s
     /c &quot;$commandline&quot;</strong> を使うようになりました。
     これは、(追加のクォート無しで) <strong class="command">$commandline</strong> を実行することと同じです。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.sysvsem">
  <h3 class="title">Sysvsem</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.sem-get.php" class="function">sem_get()</a></span> 関数の 
     <code class="parameter">auto_release</code> 引数は、
     int ではなく bool の値を受け入れるように変更されました。
    </p>
   </li>
  </ul>
 </div>

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

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     内部的に使われていなかった
     <code class="parameter">use_include_path</code> 引数が、
     <span class="function"><a href="tidy.repairstring.php" class="function">tidy_repair_string()</a></span> 関数から削除されました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="tidy.repairstring.php" class="methodname">tidy::repairString()</a></span>,
     <span class="methodname"><a href="tidy.repairfile.php" class="methodname">tidy::repairFile()</a></span> が、staticメソッドになりました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.tokenizer">
  <h3 class="title">Tokenizer</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <strong><code><a href="tokens.php#constant.t-comment">T_COMMENT</a></code></strong> トークンは最後の改行文字を含まなくなりました。
     改行文字はその後に続く
     <strong><code><a href="tokens.php#constant.t-whitespace">T_WHITESPACE</a></code></strong> トークンに含まれるようになります。
     注意すべきなのは、
     <strong><code><a href="tokens.php#constant.t-comment">T_COMMENT</a></code></strong> の後にホワイトスペースが続くとは限らないことです。
     <strong><code><a href="tokens.php#constant.t-close-tag">T_CLOSE_TAG</a></code></strong> やファイルの終端が続く場合もありえます。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     名前空間の中にある名前は、
     <strong><code><a href="tokens.php#constant.t-name-qualified">T_NAME_QUALIFIED</a></code></strong>
     (<code class="code">Foo\Bar</code>),
     <strong><code><a href="tokens.php#constant.t-name-fully-qualified">T_NAME_FULLY_QUALIFIED</a></code></strong>
     (<code class="code">\Foo\Bar</code>),
     <strong><code><a href="tokens.php#constant.t-name-relative">T_NAME_RELATIVE</a></code></strong>
     (<code class="code">namespace\Foo\Bar</code>) 
     トークンを使って表現されるようになりました。

     <strong><code><a href="tokens.php#constant.t-ns-separator">T_NS_SEPARATOR</a></code></strong> トークンは
     単独の名前空間の区切り文字としてだけ使われます。
     そして、グループ化されたuse宣言と一緒に使った場合にだけ文法的に合法です。
     
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.xmlreader">
  <h3 class="title">XMLReader</h3>

  <p class="para">
   <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> が staticメソッドになりました。
   これらは、まだインスタンスメソッドとして呼び出すことが出来ますが、
   クラスを継承し、これらのメソッドをオーバーライドする場合は、
   それらは static として宣言する必要があります。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.xmlrpc">
  <h3 class="title">XML-RPC</h3>

  <p class="para">
   XML-RPC 拡張モジュールは PECL に移動し、PHPの一部として配布されなくなりました。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.zip">
  <h3 class="title">Zip</h3>

  <p class="para">
   <strong><code>ZipArchive::OPSYS_Z_CPM</code></strong> は削除されました(この名前は typo でした)。
   <strong><code><a href="zip.constants.php#ziparchive.constants.opsys-cpm">ZipArchive::OPSYS_CPM</a></code></strong> を代わりに使って下さい。
  </p>
 </div>

 <div class="sect2" id="migration80.incompatible.zlib">
  <h3 class="title">Zlib</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.gzgetss.php" class="function">gzgetss()</a></span> 関数が削除されました。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <a href="zlib.configuration.php#ini.zlib.output-compression" class="link">zlib.output_compression</a>
     は、<code class="literal">Content-Type: image/*</code> を自動的に無効にすることはなくなりました。
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.incompatible.php-test-packs">
  <h3 class="title">Windows の PHP Test Packs</h3>

  <p class="para">
   テストランナーの名前が、<var class="filename">run-test.php</var> から
   <var class="filename">run-tests.php</var> に変更されました。
   これは、php-src の名前に合わせるためです。
  </p>
 </div>
</div><?php manual_footer($setup); ?>