<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration74.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'migration74.deprecated.php',
    1 => 'PHP 7.4.x で推奨されなくなる機能',
    2 => 'PHP 7.4.x で推奨されなくなる機能',
  ),
  'up' => 
  array (
    0 => 'migration74.php',
    1 => 'PHP 7.3.x から PHP 7.4.x への移行',
  ),
  'prev' => 
  array (
    0 => 'migration74.incompatible.php',
    1 => '下位互換性のない変更点',
  ),
  'next' => 
  array (
    0 => 'migration74.removed-extensions.php',
    1 => '削除された拡張モジュール',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'appendices/migration74/deprecated.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration74.deprecated" class="sect1">
 <h2 class="title">PHP 7.4.x で推奨されなくなる機能</h2>

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

  <div class="sect3" id="migration74.deprecated.core.nested-ternary">
   <h4 class="title">明示的に括弧で囲わずに三項演算子をネストする</h4>

   <p class="para">
    三項演算子をネストする場合、演算の順番を示すために明示的に括弧で囲わなければならなくなりました。以前は、括弧を使わなかった場合、左結合の演算がほとんどの場合期待した動作になりませんでした。
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />1 </span><span style="color: #007700">? </span><span style="color: #0000BB">2 </span><span style="color: #007700">: </span><span style="color: #0000BB">3 </span><span style="color: #007700">? </span><span style="color: #0000BB">4 </span><span style="color: #007700">: </span><span style="color: #0000BB">5</span><span style="color: #007700">;   </span><span style="color: #FF8000">// deprecated<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">1 </span><span style="color: #007700">? </span><span style="color: #0000BB">2 </span><span style="color: #007700">: </span><span style="color: #0000BB">3</span><span style="color: #007700">) ? </span><span style="color: #0000BB">4 </span><span style="color: #007700">: </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// ok<br /></span><span style="color: #0000BB">1 </span><span style="color: #007700">? </span><span style="color: #0000BB">2 </span><span style="color: #007700">: (</span><span style="color: #0000BB">3 </span><span style="color: #007700">? </span><span style="color: #0000BB">4 </span><span style="color: #007700">: </span><span style="color: #0000BB">5</span><span style="color: #007700">); </span><span style="color: #FF8000">// ok<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    2番目のオペランドをネストさせる場合は、括弧は必須では <em>ありません</em>。
    なぜなら、これについては曖昧さがなく、結合法則に影響がないからです。
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">1 ? 2 ? 3 : 4 : 5 // ok</span></code></div>
     </div>

    </div>
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.array-string-access-curly-brace">
   <h4 class="title">波括弧を使った、配列や文字列のオフセットへのアクセス</h4>

   <p class="para">
    波括弧を使って配列や文字列のオフセットにアクセスする文法は推奨されません。<code class="literal">$var{$idx}</code> でなはく <code class="literal">$var[$idx]</code> を使って下さい。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.real">
   <h4 class="title">(real) によるキャストと <span class="function"><a href="function.is-real.php" class="function">is_real()</a></span> 関数</h4>

   <p class="para">
    <code class="literal">(real)</code> によるキャストは推奨されません。
    <code class="literal">(float)</code> を代わりに使って下さい。
   </p>
   <p class="para">
    <span class="function"><a href="function.is-real.php" class="function">is_real()</a></span> 関数も同様に推奨されません。
    <span class="function"><a href="function.is-float.php" class="function">is_float()</a></span> 関数を使って下さい。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.unbind-this">
   <h4 class="title"><code class="literal">$this</code>
   が使われている場合に、<code class="literal">$this</code> のバインドを解除する</h4>

   <p class="para">
    <code class="literal">$this</code> を使っている static でないクロージャの
    <code class="literal">$this</code> のバインドを解除することは推奨されません。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.parent">
   <h4 class="title">親クラスがない場合における <code class="literal">parent</code> キーワードの利用</h4>

   <p class="para">
    親クラスがないクラス内で <code class="literal">parent</code>
    を使うのは推奨されませんし、将来的にはコンパイル時にエラーが発生することになるでしょう。
    現状では、この推奨されないエラーは、実行時に親クラスに対してアクセスされた場合に生成されます。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.allow-url-include">
   <h4 class="title">php.ini における allow_url_include オプション</h4>

   <p class="para">
    <a href="filesystem.configuration.php#ini.allow-url-include" class="link">allow_url_include</a>
    iniディレクティブは推奨されません。これを有効にすると、起動時に推奨されない警告が生成されます。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.invalid-base-characters">
   <h4 class="title">基数を変更する関数における不正な文字</h4>

   <p class="para">
    <span class="function"><a href="function.base-convert.php" class="function">base_convert()</a></span>,
    <span class="function"><a href="function.bindec.php" class="function">bindec()</a></span>, <span class="function"><a href="function.octdec.php" class="function">octdec()</a></span> および
    <span class="function"><a href="function.hexdec.php" class="function">hexdec()</a></span>
    関数に不正な文字を渡すと、推奨されない警告が生成されるようになりました。
    あたかも不正な文字が存在しないかのように結果は計算されます。空白文字が前後にあったり、(基数によっては)
    0x をプレフィックスとして指定することも可能です。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.array-key-exists-objects">
   <h4 class="title">オブジェクトに対する <span class="function"><a href="function.array-key-exists.php" class="function">array_key_exists()</a></span> 関数の使用</h4>

   <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>
  </div>

  <div class="sect3" id="migration74.deprecated.core.magic-quotes-functions">
   <h4 class="title">マジッククォート関数</h4>

   <p class="para">
    <span class="function"><a href="function.get-magic-quotes-gpc.php" class="function">get_magic_quotes_gpc()</a></span> や
    <span class="function"><a href="function.get-magic-quotes-runtime.php" class="function">get_magic_quotes_runtime()</a></span>
    関数は推奨されません。これらの関数は常に <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> を返します。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.hebrevc">
   <h4 class="title"><span class="function"><a href="function.hebrevc.php" class="function">hebrevc()</a></span> 関数</h4>

   <p class="para">
    <span class="function"><a href="function.hebrevc.php" class="function">hebrevc()</a></span> 関数は推奨されません。
    <code class="literal">nl2br(hebrev($str))</code> で置き換えられますが、Unicode RTL
    のサポートを使う方が好ましいです。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.convert-cyr-string">
   <h4 class="title"><span class="function"><a href="function.convert-cyr-string.php" class="function">convert_cyr_string()</a></span> 関数</h4>

   <p class="para">
    <span class="function"><a href="function.convert-cyr-string.php" class="function">convert_cyr_string()</a></span> 関数は推奨されません。
    <span class="function"><strong>mb_convert_string()</strong></span>,
    <span class="function"><a href="function.iconv.php" class="function">iconv()</a></span> または <span class="classname"><a href="class.uconverter.php" class="classname">UConverter</a></span>
    のいずれかで置き換えることができます。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.money-format">
   <h4 class="title"><span class="function"><a href="function.money-format.php" class="function">money_format()</a></span> 関数</h4>

   <p class="para">
    <span class="function"><a href="function.money-format.php" class="function">money_format()</a></span> 関数は推奨されません。
    intl の <span class="classname"><a href="class.numberformatter.php" class="classname">NumberFormatter</a></span> 機能に置き換えられました。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.ezmlm-hash">
   <h4 class="title"><span class="function"><a href="function.ezmlm-hash.php" class="function">ezmlm_hash()</a></span> 関数</h4>

   <p class="para">
    <span class="function"><a href="function.ezmlm-hash.php" class="function">ezmlm_hash()</a></span> 関数の使用は推奨されません。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.restore-include-path">
   <h4 class="title"><span class="function"><a href="function.restore-include-path.php" class="function">restore_include_path()</a></span> 関数</h4>

   <p class="para">
    <span class="function"><a href="function.restore-include-path.php" class="function">restore_include_path()</a></span> 関数の使用は推奨されません。
    <code class="literal">ini_restore(&#039;include_path&#039;)</code> に置き換えることができます。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.implode-reverse-parameters">
   <h4 class="title">Implode 関数の、歴史的なパラメータ順序</h4>

   <p class="para">
    <span class="function"><a href="function.implode.php" class="function">implode()</a></span>
    関数に逆の順番でパラメータを渡すのは推奨されなくなりました。<code class="literal">implode($parts,
    $glue)</code> ではなく、 <code class="literal">implode($glue, $parts)</code>
    を使ってください。
   </p>
  </div>

 </div>

 <div class="sect2" id="migration74.deprecated.com">
  <h3 class="title">COM</h3>

  <p class="para">
   大文字小文字を区別せず、定数を登録することで型のライブラリをインポートすることは推奨されません。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.filter">
  <h3 class="title">Filter</h3>

  <p class="para">
   <strong><code><a href="filter.constants.php#constant.filter-sanitize-magic-quotes">FILTER_SANITIZE_MAGIC_QUOTES</a></code></strong> は推奨されません。
   <strong><code><a href="filter.constants.php#constant.filter-sanitize-add-slashes">FILTER_SANITIZE_ADD_SLASHES</a></code></strong> を代わりに使って下さい。
  </p>
 </div>

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

  <p class="para">
   <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span>
   に文字列でないパターンを渡すことは推奨されません。現状は、文字列でないパターンは
   ASCII コードポイントと解釈されます。PHP 8
   では、パターンは文字列として解釈されるようになります。
  </p>
  <p class="para">
   <span class="function"><a href="function.mb-strrpos.php" class="function">mb_strrpos()</a></span>
   関数に、3番目のパラメーターとしてエンコーディングを渡すのは推奨されません。代わりに
   0から始まるオフセットを渡すか、4番目のパラメーターとしてエンコーディングを渡すようにします。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.ldap">
  <h3 class="title">LDAP</h3>

  <p class="para">
   <span class="function"><a href="function.ldap-control-paged-result-response.php" class="function">ldap_control_paged_result_response()</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-search.php" class="function">ldap_search()</a></span>
   を代わりに使うことで行なえます。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.reflection">
  <h3 class="title">Reflection</h3>

  <p class="para">
   <span class="methodname"><a href="reflectiontype.tostring.php" class="methodname">ReflectionType::__toString()</a></span>
   を呼び出すと、推奨されない警告が生成されるようになりました。このメソッドは
   <span class="methodname"><a href="reflectionnamedtype.getname.php" class="methodname">ReflectionNamedType::getName()</a></span>
   を使うことが好ましいために、PHP 7.1
   から推奨されていませんでしたが、技術的な理由によって、推奨されない警告をこれまで発生させてきませんでした。
  </p>
  <p class="para">
   <span class="classname"><a href="class.reflection.php" class="classname">Reflection</a></span> クラスの全ての
   <code class="literal">export()</code>
   メソッドは推奨されなくなりました。次のようにして、<span class="classname"><a href="class.reflection.php" class="classname">Reflection</a></span>
   オブジェクトを生成し、string に変換するようにして下さい:
   <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// ReflectionClass::export(Foo::class, false) is:<br /></span><span style="color: #007700">echo new </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::class), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// $str = ReflectionClass::export(Foo::class, true) is:<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= (string) new </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::class);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.socket">
  <h3 class="title">Socket</h3>

  <p class="para">
   glibc で推奨されなくなったため、<span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span>
   関数の <strong><code>AI_IDN_ALLOW_UNASSIGNED</code></strong> と
   <strong><code>AI_IDN_USE_STD3_ASCII_RULES</code></strong>
   フラグの使用は推奨されません。
  </p>
 </div>

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