向后兼容性指南

我们非常重视确保您能够轻松、顺利地升级您的应用程序。这就是为什么我们只在主要版本发布时才破坏兼容性。您可能熟悉语义化版本控制,这是我们在所有 CakePHP 项目中使用的通用指南。简而言之,语义化版本控制意味着只有主要版本(例如 2.0、3.0、4.0)可能会破坏向后兼容性。次要版本(例如 2.1、3.1、3.2)可能会引入新功能,但不能破坏兼容性。错误修复版本(例如 2.1.2、3.0.1)不添加新功能,只修复 bug 或提高性能。

注意

弃用功能将在框架的下一个主要版本中移除。建议您在引入弃用功能时就对其进行调整,以确保未来的升级更加容易。

为了更清楚地了解您在每个发布阶段可以预期的更改,我们为使用 CakePHP 的开发人员和参与 CakePHP 开发的开发人员提供了更详细的信息,这些信息有助于设定对次要版本中可以进行的操作的预期。主要版本可以根据需要进行任意数量的重大更改。

迁移指南

对于每个主要版本和次要版本,CakePHP 团队都会提供迁移指南。这些指南解释了每个版本中的新功能和任何破坏性更改。它们可以在手册的附录部分找到。

使用 CakePHP

如果您使用 CakePHP 构建应用程序,以下指南解释了您可以预期的稳定性。

接口

除了主要版本之外,CakePHP 提供的接口不会对任何现有方法进行更改。可能会添加新方法,但不会更改任何现有方法。

CakePHP 提供的类可以在应用程序代码和主要版本之外被构建,并使用其公共方法和属性,确保向后兼容性。

注意

CakePHP 中的一些类标记有@internal API 文档标签。这些类稳定,没有向后兼容性承诺。

在次要版本中,可能会向类添加新方法,而现有方法可能会添加新参数。任何新参数都将具有默认值,但如果您已使用不同的签名覆盖了方法,则可能会看到致命错误。在该版本的迁移指南中,将记录添加了新参数的方法。

下表概述了一些用例以及您可以从 CakePHP 中获得的兼容性

如果您…

向后兼容性?

对该类进行类型提示

创建新实例

扩展该类

访问公共属性

调用公共方法

扩展类,然后…

覆盖公共属性

访问受保护的属性

[1]

覆盖受保护的属性

[1]

覆盖受保护的方法

[1]

调用受保护的方法

[1]

添加公共属性

添加公共方法

向覆盖的方法添加参数

[1]

向现有方法参数添加默认参数值

参与 CakePHP 开发

如果您正在帮助改进 CakePHP,请在添加/更改功能时牢记以下准则

在次要版本中,您可以

在次要版本中,您可以…

移除类

移除接口

移除特性

设置为 final

设置为 abstract

更改名称

[2]

属性

添加公共属性

移除公共属性

添加受保护的属性

移除受保护的属性

[3]

方法

添加公共方法

移除公共方法

添加受保护的方法

移至父类

移除受保护的方法

[3]

降低可见性

更改方法名称

[2]

添加带有默认值的新参数

向现有方法添加新的必填参数。

从现有参数中移除默认值

更改方法类型 void

弃用

在每个次要版本中,都可能会弃用功能。如果弃用了功能,将添加 API 文档和运行时警告。运行时错误可以帮助您定位需要在出现错误之前更新的代码。如果您想禁用运行时警告,可以使用Error.errorLevel配置值

// in config/app.php
// ...
'Error' => [
    'errorLevel' => E_ALL ^ E_USER_DEPRECATED,
]
// ...

将禁用运行时弃用警告。

实验性功能

实验性功能不包括在上述向后兼容性承诺中。实验性功能可能会在次要版本中进行重大更改,只要它们仍然处于实验阶段。实验性功能可以通过手册中的警告和 API 文档中@experimental的使用来识别。

实验性功能旨在帮助收集有关功能如何工作的反馈,然后再使其稳定。一旦接口和行为已在社区中得到验证,将移除实验性标志。