<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration56.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'migration56.incompatible.php',
    1 => '向后不兼容',
    2 => '向后不兼容',
  ),
  'up' => 
  array (
    0 => 'migration56.php',
    1 => '从 PHP 5.5.x 移植到 PHP 5.6.x',
  ),
  'prev' => 
  array (
    0 => 'migration56.php',
    1 => '从 PHP 5.5.x 移植到 PHP 5.6.x',
  ),
  'next' => 
  array (
    0 => 'migration56.new-features.php',
    1 => '新特性',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'appendices/migration56/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration56.incompatible" class="sect1">
 <h2 class="title">向后不兼容</h2>
 <p class="simpara">
  虽然大部分 PHP 5 的代码无需修改即可正常运行，但是有部分代码是无法向后兼容的：
 </p>

 <div class="sect2" id="migration56.incompatible.array-keys">
  <h3 class="title">使用数组标识符为类定义数组类型的属性时，数组的键不会被覆盖</h3>

  <p class="para">
   在 PHP 5.6 之前的版本中，为类定义数组类型的属性时，如果数组中同时使用了显式数组键和隐式数组键，并且显式的键和隐式的序列键相同，那么数组的键将被覆盖。例如：
  </p>

  <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: #007700">class </span><span style="color: #0000BB">C </span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">ONE </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">$array </span><span style="color: #007700">= [<br />        </span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">ONE </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">,<br />        </span><span style="color: #DD0000">'quux'</span><span style="color: #007700">,<br />    ];<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((new </span><span style="color: #0000BB">C</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">以上示例在 PHP 5.5 中的输出：</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [0]=&gt;
  string(3) &quot;bar&quot;
  [1]=&gt;
  string(4) &quot;quux&quot;
}

</pre></div>
   </div>
   <p class="para">以上示例在 PHP 5.6 中的输出：</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(3) {
  [1]=&gt;
  string(3) &quot;foo&quot;
  [2]=&gt;
  string(3) &quot;bar&quot;
  [3]=&gt;
  string(4) &quot;quux&quot;
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration56.incompatible.json-decode">
  <h3 class="title">严格的 <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span></h3>

  <p class="para">
   对于 JSON 字面量 <code class="literal">true</code>，<code class="literal">false</code> 和
   <code class="literal">null</code>，如果不采用小写格式，将会被 <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span>
   函数拒绝，同时相应的设置 <span class="function"><a href="function.json-last-error.php" class="function">json_last_error()</a></span>。在之前的版本中，<span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span>
   函数可以接受这些字面量的全部大写或者大小写混写的格式。
  </p>

  <p class="para">
   此变更仅会影响传入到 <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span> 
   中的 JSON 格式无效的情况，有效的 JSON 输入不会受到影响并且能够正确解析。
  </p>
 </div>

 <div class="sect2" id="migration56.incompatible.peer-verification">
  <h3 class="title">当使用 SSL/TLS 的时候，流封装器默认验证端点证书和主机名</h3>

  
   <p class="para">
    All encrypted client streams now enable peer verification by default. By
    default, this will use OpenSSL&#039;s default CA bundle to verify the peer
    certificate. In most cases, no changes will need to be made to communicate
    with servers with valid SSL certificates, as distributors generally
    configure OpenSSL to use known good CA bundles.
   </p>

   <p class="para">
    The default CA bundle may be overridden on a global basis by setting
    either the openssl.cafile or openssl.capath configuration setting, or on a
    per request basis by using the
    <a href="context.ssl.php#context.ssl.cafile" class="link"><code class="parameter">cafile</code></a> or
    <a href="context.ssl.php#context.ssl.capath" class="link"><code class="parameter">capath</code></a>
    context options.
   </p>

   <p class="para">
    While not recommended in general, it is possible to disable peer
    certificate verification for a request by setting the
    <a href="context.ssl.php#context.ssl.verify-peer" class="link"><code class="parameter">verify_peer</code></a>
    context option to <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, and to disable peer name validation by setting
    the <a href="context.ssl.php#context.ssl.verify-peer-name" class="link"><code class="parameter">verify_peer_name</code></a>
    context option to <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   </p>

 </div>

 <div class="sect2" id="migration56.incompatible.gmp">
  <h3 class="title"><a href="book.gmp.php" class="link">GMP</a> 资源现为对象</h3>

  <p class="para">
   <a href="book.gmp.php" class="link">GMP</a> 资源现为对象。GMP 扩展中的基于函数的 API
   实现不受影响，只有在代码中使用 <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span>
   或类似函数来显示检测是否资源类型的代码才会受到影响。
  </p>
 </div>

 <div class="sect2" id="migration56.incompatible.mcrypt">
  <h3 class="title"><a href="book.mcrypt.php" class="link">Mcrypt</a> 函数需要有效长度的密钥和初始向量</h3>

  <p class="para">
   <span class="function"><a href="function.mcrypt-encrypt.php" class="function">mcrypt_encrypt()</a></span>、<span class="function"><a href="function.mcrypt-decrypt.php" class="function">mcrypt_decrypt()</a></span>、<span class="function"><strong>mcrypt_cbc()</strong></span>、<span class="function"><strong>mcrypt_cfb()</strong></span>、<span class="function"><strong>mcrypt_ecb()</strong></span>、<span class="function"><a href="function.mcrypt-generic.php" class="function">mcrypt_generic()</a></span>
   以及 <span class="function"><strong>mcrypt_ofb()</strong></span> 函数不再接受无效长度的密钥和初始向量，对于需要初始向量的分组加密模式，如果不提供初始向量，函数调用将会失败。
  </p>
 </div>
 
 <div class="sect2" id="migration56.incompatible.curl">
  <h3 class="title"><a href="book.curl.php" class="link">cURL</a> 文件上传</h3>

  <p class="para">
   必须先设置 CURLOPT_SAFE_UPLOAD 为 <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> 才能够使用 @file 语法来上传文件。建议使用
   <span class="classname"><a href="class.curlfile.php" class="classname">CURLFile</a></span> 类来上传文件。
  </p>
 </div>
</div><?php manual_footer($setup); ?>