<?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.other-changes.php',
    1 => 'その他の変更',
    2 => 'その他の変更',
  ),
  'up' => 
  array (
    0 => 'migration80.php',
    1 => 'PHP 7.4.x から PHP 8.0.x への移行',
  ),
  'prev' => 
  array (
    0 => 'migration80.deprecated.php',
    1 => '推奨されなくなる機能',
  ),
  'next' => 
  array (
    0 => 'migration74.php',
    1 => 'PHP 7.3.x から PHP 7.4.x への移行',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'appendices/migration80/other-changes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

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

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

   <p class="para">
    PHP モジュールの名前が <code class="literal">php7_module</code> から
    <code class="literal">php_module</code> に変更されました。
   </p>
  </div>
 </div>

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

  <div class="sect3" id="migration80.other-changes.functions.reflection">
   <h4 class="title">リフレクション</h4>

   <p class="para">
    <span class="methodname"><a href="reflectionclass.getconstants.php" class="methodname">ReflectionClass::getConstants()</a></span> と
    <span class="methodname"><a href="reflectionclass.getreflectionconstants.php" class="methodname">ReflectionClass::getReflectionConstants()</a></span> の結果は
    新しい引数 <code class="parameter">filter</code> を経由してフィルタされるように変更されました。
    この用途のために、以下の3つの新しい定数が追加されています:
   </p>
   <p class="para">
    <ul class="simplelist">
     <li><strong><code><a href="class.reflectionclassconstant.php#reflectionclassconstant.constants.is-public">ReflectionClassConstant::IS_PUBLIC</a></code></strong></li>
     <li><strong><code><a href="class.reflectionclassconstant.php#reflectionclassconstant.constants.is-protected">ReflectionClassConstant::IS_PROTECTED</a></code></strong></li>
     <li><strong><code><a href="class.reflectionclassconstant.php#reflectionclassconstant.constants.is-private">ReflectionClassConstant::IS_PRIVATE</a></code></strong></li>
    </ul>
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.functions.standard">
   <h4 class="title">標準ライブラリ</h4>

   <p class="para">
    数学関数
    <span class="function"><a href="function.abs.php" class="function">abs()</a></span>,
    <span class="function"><a href="function.ceil.php" class="function">ceil()</a></span>,
    <span class="function"><a href="function.floor.php" class="function">floor()</a></span>,
    <span class="function"><a href="function.round.php" class="function">round()</a></span>
    は、
    <a href="language.types.declarations.php#language.types.declarations.strict" class="link"><code class="literal">strict_types</code> ディレクティブ</a>
    を適切に尊重するようになりました。
    PHP 8.0.0 より前のバージョンでは、
    たとえ strict モードであっても、
    最初の引数の型を強制的に自動変換していました。
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.functions.zip">
   <h4 class="title">Zip</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      <span class="methodname"><a href="ziparchive.addglob.php" class="methodname">ZipArchive::addGlob()</a></span> と
      <span class="methodname"><a href="ziparchive.addpattern.php" class="methodname">ZipArchive::addPattern()</a></span> メソッドは
      配列 <code class="parameter">options</code> の値に、以下の値を追加で受け入れるようになりました:
     </p>
     <p class="para">
      <ul class="simplelist">
       <li><code class="literal">flags</code></li>
       <li><code class="literal">comp_method</code></li>
       <li><code class="literal">comp_flags</code></li>
       <li><code class="literal">env_method</code></li>
       <li><code class="literal">enc_password</code></li>
      </ul>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="methodname"><a href="ziparchive.addemptydir.php" class="methodname">ZipArchive::addEmptyDir()</a></span>,
      <span class="methodname"><a href="ziparchive.addfile.php" class="methodname">ZipArchive::addFile()</a></span>,
      <span class="methodname"><a href="ziparchive.addfromstring.php" class="methodname">ZipArchive::addFromString()</a></span> に新しい引数
      <code class="parameter">flags</code> が追加されました。
      これによって、名前のエンコーディング
      (<strong><code><a href="zip.constants.php#ziparchive.constants.fl-enc-guess">ZipArchive::FL_ENC_<span class="replaceable">*</span></a></code></strong>)
      とエントリの置換 (<strong><code><a href="zip.constants.php#ziparchive.constants.fl-overwrite">ZipArchive::FL_OVERWRITE</a></code></strong>) が管理できるようになります。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="methodname"><a href="ziparchive.extractto.php" class="methodname">ZipArchive::extractTo()</a></span> メソッドは、ファイルの変更時間も復元するようになりました。
     </p>
    </li>
   </ul>
  </div>
 </div>

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

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

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      CURL 拡張モジュールは、libcurl 7.29.0 以降が必須になりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      推奨されなくなっていた <span class="function"><a href="function.curl-version.php" class="function">curl_version()</a></span> 関数の
      <code class="parameter">version</code> 引数が削除されました。
     </p>
    </li>
   </ul>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.date">
   <h4 class="title">日付と時刻</h4>

   <p class="para">
    <span class="classname"><a href="class.dateperiod.php" class="classname">DatePeriod</a></span> クラスが、
    (<span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> ではなく)
    <span class="interfacename"><a href="class.iteratoraggregate.php" class="interfacename">IteratorAggregate</a></span> を実装しました。
   </p>
  </div>

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

   <p class="para">
    <span class="classname"><a href="class.domnamednodemap.php" class="classname">DOMNamedNodeMap</a></span> と <span class="classname"><a href="class.domnodelist.php" class="classname">DOMNodeList</a></span> が、
    (<span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> ではなく)
    <span class="interfacename"><a href="class.iteratoraggregate.php" class="interfacename">IteratorAggregate</a></span> を実装しました。
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.intl">
   <h4 class="title">国際化関数</h4>

   <p class="para">
    <span class="classname"><a href="class.intlbreakiterator.php" class="classname">IntlBreakIterator</a></span> と <span class="classname"><a href="class.resourcebundle.php" class="classname">ResourceBundle</a></span> が、
    (<span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> ではなく)
    <span class="interfacename"><a href="class.iteratoraggregate.php" class="interfacename">IteratorAggregate</a></span> を実装しました。
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.enchant">
   <h4 class="title">Enchant</h4>

   <p class="para">
    enchant 拡張モジュールは、利用可能な場合は、デフォルトで libenchant-2 を使うようになりました。
    libenchant バージョン1 もまだサポートしていますが、推奨されませんし、将来削除される可能性があります。
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.gd">
   <h4 class="title">GD</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      <span class="function"><a href="function.imagepolygon.php" class="function">imagepolygon()</a></span>,
      <span class="function"><a href="function.imageopenpolygon.php" class="function">imageopenpolygon()</a></span>,
      <span class="function"><a href="function.imagefilledpolygon.php" class="function">imagefilledpolygon()</a></span> 関数の
      <code class="parameter">num_points</code> 引数はオプションになりました。
      つまり、これらの関数は3つ、または4つの引数で呼び出すことが出来るということです。
      この引数が省略された場合、この値は <code class="code">count($points)/2</code> で計算されます。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      現在の補間メソッドを取得するために、<span class="function"><a href="function.imagegetinterpolation.php" class="function">imagegetinterpolation()</a></span> 関数が追加されました。
     </p>
    </li>
   </ul>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.json">
   <h4 class="title">JSON</h4>

   <p class="para">
    JSON 拡張モジュールは無効にできなくなりました。
    date 拡張モジュールと同様に、PHP をビルドするために常に必須になっています。
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.mbstring">
   <h4 class="title">マルチバイト文字列</h4>

   <p class="para">
    Unicode データのテーブルが、バージョン 13.0.0 に更新されました。
   </p>
  </div>

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

   <p class="para">
    <span class="classname"><a href="class.pdostatement.php" class="classname">PDOStatement</a></span> は、
    (<span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> ではなく)
    <span class="interfacename"><a href="class.iteratoraggregate.php" class="interfacename">IteratorAggregate</a></span> を実装しました。
   </p>
  </div>

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

   <p class="para">
    libxml の最低バージョンが 2.9.0 になりました。
    これにより、外部エンティティの読み込みがデフォルトで無効であることが保証されるようになりました。
    よって、XXE攻撃を防ぐために追加の手順を踏む必要はありません。
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.mysqli">
   <h4 class="title">MySQLi / PDO MySQL</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      mysqlnd を使わない (これはデフォルトであり、推奨されるオプションです) 場合、
      サポートされる libmysqlclient の最低バージョンは 5.5 になりました。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      <span class="classname"><a href="class.mysqli-result.php" class="classname">mysqli_result</a></span> は、
      (<span class="interfacename"><a href="class.traversable.php" class="interfacename">Traversable</a></span> ではなく)
      <span class="interfacename"><a href="class.iteratoraggregate.php" class="interfacename">IteratorAggregate</a></span> を実装しました。
     </p>
    </li>
   </ul>
  </div>

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

   <p class="para">
    PGSQL と PDO PGSQL 拡張モジュールは、libpq 9.1 以降が最低限必要になりました。
   </p>
  </div>

  <div class="sect3" id="migration80.other-changes.extensions.readline">
   <h4 class="title">Readline</h4>

   <p class="para">
    対話的なプロンプトが始まる前に
    (つまり、 <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a> を実行中に)
    <span class="function"><a href="function.readline-completion-function.php" class="function">readline_completion_function()</a></span> を呼ぶと、
    デフォルトの対話プロンプトの補完関数を上書きするようになりました。
    PHP 8.0.0 より前のバージョンでは、
    <span class="function"><a href="function.readline-completion-function.php" class="function">readline_completion_function()</a></span> 関数は
    対話的なプロンプトが始まった後に呼び出したときにだけ動作していました。
   </p>
  </div>

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

   <p class="para">
    <span class="classname"><a href="class.simplexmlelement.php" class="classname">SimpleXMLElement</a></span> は、
    <span class="interfacename"><a href="class.recursiveiterator.php" class="interfacename">RecursiveIterator</a></span> を実装し、
    <span class="classname"><a href="class.simplexmliterator.php" class="classname">SimpleXMLIterator</a></span> の機能を吸収しました。
    <span class="classname"><a href="class.simplexmliterator.php" class="classname">SimpleXMLIterator</a></span> は、
    <span class="classname"><a href="class.simplexmlelement.php" class="classname">SimpleXMLElement</a></span> を継承しただけのものです。
   </p>
  </div>
 </div>

 <div class="sect2" id="migration80.other-changes.ini">
  <h3 class="title">INI ファイルの扱いの変更</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     com.dotnet_version
     は、<span class="classname"><a href="class.dotnet.php" class="classname">dotnet</a></span> オブジェクトで使う、
     .NET framework のバージョンを選ぶための新しいINIディレクティブです。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     zend.exception_string_param_max_len
     は、文字列化されたスタックトレースの引数中の、
     文字列の最大の長さを設定する新しいINIディレクティブです。
    </p>
   </li>
   </ul>
 </div>

 <div class="sect2" id="migration80.other-changes.ebcdic">
  <h3 class="title">EBCDIC</h3>

  <p class="para">
   EBCDIC ターゲットはサポートされなくなりました。
   しかし、そもそもまだ動いているわけでもなさそうです。
  </p>
 </div>

 <div class="sect2" id="migration80.other-changes.performance">
  <h3 class="title">パフォーマンスに関わる変更</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     ジャストインタイム (JIT) コンパイラが opcache 拡張モジュールに追加されました。
     
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     隙間がない配列で <span class="function"><a href="function.array-slice.php" class="function">array_slice()</a></span> 関数を使う場合、
     最初のオフセットを探すために配列全体を走査しなくなりました。
     これによって、オフセットが巨大、かつサイズが小さい場合に、
     関数の実行時間が著しく改善する可能性があります。
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <strong><code><a href="string.constants.php#constant.lc-ctype">LC_CTYPE</a></code></strong> ロケールが
     <code class="literal">&quot;C&quot;</code> の場合 (これはデフォルトです)、
     <span class="function"><a href="function.strtolower.php" class="function">strtolower()</a></span> 関数は SIMD 実装を使うようになりました。
    </p>
   </li>
  </ul>
 </div>

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