## OOP 变更日志

这里只记录了 PHP OOP 模型的变更记录。有关变更功能的具体描述与其他相关注意事项，可以到具体的 OOP 文档链接中查看。

版本 | 说明
--- | ---
8.4.0 | 新增：支持属性挂钩。
8.4.0 | 添加：支持 延迟对象。
8.1.0 | 添加：支持类常量的 final 修饰符。此外，接口常量默认可覆盖。
8.0.0 | 添加：支持 nullsafe 操作符 ?-> 来访问可能为空的对象中的属性和方法。
7.4.0 | 已变更：可以通过 __toString() 抛出异常。
7.4.0 | 增加：支持限制返回类型协变与参数类型逆变。 如果使用自动加载，则完整的差异支持可用。 在一个文件内，只有非循环类型引用是可能的。
7.4.0 | 增加：可以给类属性增加类型。
7.3.0 | 不兼容：不再支持对使用非 int 键的 Traversable 进行参数解包。该功能不是有意设计的，因此被删除。
7.3.0 | 不兼容：在以前的版本中，可以通过分配一个引用来分离静态属性，这一特性已被移除。
7.3.0 | 已变更： instanceof 运算符允许将字面量作为第一个操作数，在这种情况下，结果始终是 `false` 。
7.2.0 | 废弃：__autoload() 方法已被废弃，请使用 spl_autoload_register() 代替。
7.2.0 | 已变更：`object` 做为保留关键字，不允许做为 classes、interfaces、traits 的名称。
7.2.0 | 已变更：分组引入命名空间时，允许行尾添加多余的逗号分隔符。
7.2.0 | 已变更：参数类型扩展。 现在可以省略来自重写方法和从接口实现的参数类型。
7.2.0 | 已变更：当一个抽象类（abstract class）继承另一个抽象类时，抽象的方法现在可以被覆写。
7.1.0 | 已变更：增加系统保留关键字 `void` 和 `iterable`，不允许做为 classes、interfaces、traits 的名称。
7.1.0 | 增加：类常量增加了 访问控制（可见性）。
7.0.0 | 废弃：对未声明为静态的方法（Static）的静态调用。
7.0.0 | 废弃：PHP 4 风格的构造函数 constructor 已被废弃。
7.0.0 | 增加： use 组声明：同一个命名空间导入的类、函数、常量现在可以组合在一个 use 语句中。
7.0.0 | 增加：使用 `new class` 语法来支持 匿名类。
7.0.0 | 不兼容：遍历非 Traversable object 将跟遍历引用 array 具有相同的行为。
7.0.0 | 已变更：traits 里定义兼容的属性不再产生错误信息。
5.6.0 | 增加: __debugInfo() 方法。
5.5.0 | 增加: ::class 魔法常量。
5.5.0 | 增加: finally 来处理异常。
5.4.0 | 增加： traits。
5.4.0 | 已变更：如果一个抽象 类定义了 构造函数 的签名，它将必须被实现。
5.3.3 | 已变更： 命名空间 中和类同名的方法不再被作为 构造函数。这个变更不影响非命名空间中的类。
5.3.0 | 已变更：类实现接口的方法所具有的默认值不再需要和接口的默认值一致。
5.3.0 | 已变更： 现在它也能够通过一个变量来引用一个类（例如，`echo $classname::constant;`）。 这个变量的值不能是一个保留关键词（比如，`self`、`parent` 或 `static`）。
5.3.0 | 已变更： 如果重载方法被定义为 static 将导致一个 `E_WARNING` 级别的错误。 同时它也需要强制使用 public 的可见性。
5.3.0 | 已变更： 在 5.3.0 之前的版本，__autoload() 函数里抛出的异常不能被 catch 块结构捕获，并会导致一个致命错误。 现在在一个前提下 catch 块能够捕获 __autoload 函数中抛出的错误。如果抛出一个自定义异常，这个自定义异常的类必须是可用的。否则 __autoload 函数可能递归自动加载这个自定义异常类。
5.3.0 | 新增： __callStatic 方法。
5.3.0 | 新增： heredoc 和 nowdoc 支持类的 常量 和属性的定义。 注意：heredoc 值必须和双引号字符串遵循同样的规则（比如，变量将被替换）。
5.3.0 | 新增： 后期静态绑定。
5.3.0 | 新增： __invoke 方法。
5.2.0 | 已变更：__toString 方法仅在直接与 echo 或 print 使用时被调用。但是现在它能在任何字符串上下文被调用（比如在 printf() 中使用 `%s` ），但不是在其他类型的上下文被调用（例如 `%d` 修饰符）。 自 PHP 5.2.0 起，将不具有 __toString 方法的对象转化为字符串将导致一个 `E_RECOVERABLE_ERROR` 级别的错误。
5.1.3 | 已变更：在 PHP 5 之前的版本，`var` 的使用已被废弃，并将产生一个 `E_STRICT` 级别的错误。现在它不再被废弃，因此也不会产生错误。
5.1.0 | 已变更：现在 __set_state 静态方法在 var_export() 导出类时会被调用。
5.1.0 | 新增：__isset 和 __unset 方法。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open