<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'language.oop5.changelog.php',
    1 => 'OOP 变更日志',
    2 => 'OOP 变更日志',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => '类与对象',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.lazy-objects.php',
    1 => '延迟对象',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.php',
    1 => '概述',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'language/oop5/changelog.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.changelog" class="sect1">
 <h2 class="title">OOP 变更日志</h2>
 <p class="para">
  这里只记录了 PHP OOP 模型的变更记录。有关变更功能的具体描述与其他相关注意事项，可以到具体的 OOP 文档链接中查看。
 </p>
 <p class="para">
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>版本</th>
      <th>说明</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.4.0</td>
      <td>
       新增：支持<a href="language.oop5.property-hooks.php" class="link">属性挂钩</a>。
      </td>
     </tr>

     <tr>
      <td>8.4.0</td>
      <td>
       添加：支持 <a href="language.oop5.lazy-objects.php" class="link">延迟对象</a>。
      </td>
     </tr>

     <tr>
      <td>8.1.0</td>
      <td>
       添加：支持类常量的 <span class="modifier">final</span> 修饰符。此外，接口常量默认可覆盖。
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       添加：支持 <a href="language.oop5.basic.php#language.oop5.basic.nullsafe" class="link">nullsafe 操作符</a> <em>?-&gt;</em> 来访问可能为空的对象中的属性和方法。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       已变更：可以通过 <span class="function"><strong>__toString()</strong></span> 抛出异常。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       增加：支持限制返回类型协变与参数类型逆变。
       如果使用自动加载，则完整的差异支持可用。
       在一个文件内，只有非循环类型引用是可能的。
      </td>
     </tr>

     <tr>
      <td>7.4.0</td>
      <td>
       增加：可以给类属性增加类型。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       不兼容：不再支持对使用非 <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> 键的 <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span>
       进行参数解包。该功能不是有意设计的，因此被删除。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       不兼容：在以前的版本中，可以通过分配一个引用来分离静态属性，这一特性已被移除。
      </td>
     </tr>

     <tr>
      <td>7.3.0</td>
      <td>
       已变更： <a href="language.operators.type.php" class="link">instanceof</a>
       运算符允许将字面量作为第一个操作数，在这种情况下，结果始终是 <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> 。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       废弃：<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> 代替。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：<code class="literal">object</code> 做为保留关键字，不允许做为
       classes、interfaces、traits 的名称。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：分组引入命名空间时，允许行尾添加多余的逗号分隔符。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：参数类型扩展。
       现在可以省略来自重写方法和从接口实现的参数类型。
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       已变更：当一个抽象类（abstract class）继承另一个抽象类时，抽象的方法现在可以被覆写。
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       已变更：增加系统保留关键字 <code class="literal">void</code> 和 <code class="literal">iterable</code>，不允许做为
       classes、interfaces、traits 的名称。
      </td>
     </tr>

     <tr>
      <td>7.1.0</td>
      <td>
       增加：类常量增加了
       <a href="language.oop5.visibility.php#language.oop5.visiblity-constants" class="link">访问控制（可见性）</a>。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       废弃：对未声明为静态的方法（<a href="language.oop5.static.php" class="link">Static</a>）的静态调用。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       废弃：PHP 4 风格的构造函数 <a href="language.oop5.decon.php" class="link">constructor</a> 已被废弃。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       增加： <em>use</em> 
       组声明：同一个命名空间导入的类、函数、常量现在可以组合在一个 use 语句中。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       增加：使用 <code class="literal">new class</code> 语法来支持
       <a href="language.oop5.anonymous.php" class="link">匿名类</a>。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       不兼容：遍历非 <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> <span class="type"><a href="language.types.object.php" class="type object">object</a></span> 将跟遍历引用 <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
       具有相同的行为。
      </td>
     </tr>

     <tr>
      <td>7.0.0</td>
      <td>
       已变更：<a href="language.oop5.traits.php" class="link">traits</a> 里定义兼容的属性不再产生错误信息。
      </td>
     </tr>

     <tr>
      <td>5.6.0</td>
      <td>
       增加: <a href="language.oop5.magic.php#object.debuginfo" class="link">__debugInfo()</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       增加: <a href="language.oop5.basic.php#language.oop5.basic.class.class" class="link">::class</a> 魔法常量。
      </td>
     </tr>

     <tr>
      <td>5.5.0</td>
      <td>
       增加: <a href="language.exceptions.php" class="link">finally</a> 来处理异常。
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       增加： <a href="language.oop5.traits.php" class="link">traits</a>。
      </td>
     </tr>

     <tr>
      <td>5.4.0</td>
      <td>
       已变更：如果一个<a href="language.oop5.abstract.php" class="link">抽象</a> 类定义了 <a href="language.oop5.decon.php" class="link">
       构造函数</a> 的签名，它将必须被实现。
      </td>
     </tr>

     <tr>
      <td>5.3.3</td>
      <td>
       已变更： <a href="language.namespaces.php" class="link">命名空间</a> 中和类同名的方法不再被作为 <a href="language.oop5.decon.php" class="link">构造函数</a>。这个变更不影响非命名空间中的类。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更：类实现接口的方法所具有的默认值不再需要和接口的默认值一致。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 现在它也能够通过一个变量来引用一个类（例如，<code class="literal">echo $classname::constant;</code>）。
       这个变量的值不能是一个保留关键词（比如，<code class="literal">self</code>、<code class="literal">parent</code> 或 <code class="literal">static</code>）。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 如果<a href="language.oop5.overloading.php" class="link">重载</a>方法被定义为 <a href="language.oop5.static.php" class="link">static</a> 将导致一个 <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> 级别的错误。
       同时它也需要强制使用 public 的可见性。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 在 5.3.0 之前的版本，<span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> 函数里抛出的异常不能被 <a href="language.exceptions.php" class="link">catch</a> 块结构捕获，并会导致一个致命错误。
       现在在一个前提下 <a href="language.exceptions.php" class="link">catch</a> 块能够捕获 __autoload 函数中抛出的错误。如果抛出一个自定义异常，这个自定义异常的类必须是可用的。否则 __autoload 函数可能递归自动加载这个自定义异常类。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.overloading.php" class="link">__callStatic</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.types.string.php#language.types.string.syntax.heredoc" class="link">heredoc</a>
       和 <a href="language.types.string.php#language.types.string.syntax.nowdoc" class="link">nowdoc</a>
       支持类的 <em>常量</em> 和属性的定义。
       注意：heredoc 值必须和双引号字符串遵循同样的规则（比如，变量将被替换）。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.late-static-bindings.php" class="link">后期静态绑定</a>。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.magic.php#object.invoke" class="link">__invoke</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.2.0</td>
      <td>
       已变更：<a href="language.oop5.magic.php#object.tostring" class="link">__toString</a> 方法仅在直接与  <span class="function"><a href="function.echo.php" class="function">echo</a></span> 或 <span class="function"><a href="function.print.php" class="function">print</a></span> 使用时被调用。但是现在它能在任何字符串上下文被调用（比如在 <span class="function"><a href="function.printf.php" class="function">printf()</a></span> 中使用 <code class="literal">%s</code> ），但不是在其他类型的上下文被调用（例如 <code class="literal">%d</code> 修饰符）。
       自 PHP 5.2.0 起，将不具有 <a href="language.oop5.magic.php#object.tostring" class="link">__toString</a> 方法的对象转化为字符串将导致一个 <strong><code><a href="errorfunc.constants.php#constant.e-recoverable-error">E_RECOVERABLE_ERROR</a></code></strong> 级别的错误。
      </td>
     </tr>

     <tr>
      <td>5.1.3</td>
      <td>
       已变更：在 PHP 5 之前的版本，<code class="literal">var</code> 的使用已被废弃，并将产生一个 <strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong> 级别的错误。现在它不再被废弃，因此也不会产生错误。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       已变更：现在 <a href="language.oop5.magic.php#object.set-state" class="link">__set_state</a> 静态方法在 <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span> 导出类时会被调用。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       新增：<a href="language.oop5.overloading.php#object.isset" class="link">__isset</a> 和 <a href="language.oop5.overloading.php#object.unset" class="link">__unset</a> 方法。
      </td>
     </tr>

    </tbody>
   
  </table>

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