<?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 => 'zh',
  ),
  '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' => 'zh',
    '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">// 弃用<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">
    当运算对象嵌套到中间时，<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">Unbinding <code class="literal">$this</code> when <code class="literal">$this</code> is used</h4>

   <p class="para">
    弃用在未捆绑 <code class="literal">$this</code> 的非静态 closure 中使用 <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>
    关键词已被废弃，并且在将来的 PHP 版本中将会抛出一个编译错误。目前只在运行时访问父类时才会产生错误。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.allow-url-include">
   <h4 class="title">allow_url_include INI 选项</h4>

   <p class="para">
    配置文件中的 <a href="filesystem.configuration.php#ini.allow-url-include" class="link">allow_url_include</a>
    选项被废弃。如果启用了该选项，将会产生一个弃用通知。
   </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> 函数已被废弃。
    可以用更国际化的 <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($glue, $parts)</code>
    来替代 <code class="literal">implode($parts, $glue)</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> 传递非字符串 pattern。目前，非字符串
   pattern 被解释为 ASCII 码点。在 PHP 8 中，pattern 将被解释为字符串。
  </p>
  <p class="para">
   弃用传递 encoding 作为 <span class="function"><a href="function.mb-strrpos.php" class="function">mb_strrpos()</a></span> 的第三个参数。而是替换为第三个参数 offset
   默认传 0，且 encoding 作为第四个参数。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.ldap">
  <h3 class="title">轻量目录访问协议</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> 现在将会抛出一个弃用通知。
   该方法从 PHP 7.1 开始，在
   <span class="methodname"><a href="reflectionnamedtype.getname.php" class="methodname">ReflectionNamedType::getName()</a></span>
   的文档中已经被声明废弃，但是由于技术原因，并没有抛出弃用通知。
  </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> 对象并转换为字符串：
   <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) 是：<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) 是：<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">
   常量 <strong><code>AI_IDN_ALLOW_UNASSIGNED</code></strong> 和
   <strong><code>AI_IDN_USE_STD3_ASCII_RULES</code></strong> 在
   <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span> 中不再可用，因为该常量在 glibc 中已被废弃。
  </p>
 </div>

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