我们非常重视确保您能够轻松、顺利地升级您的应用程序。这就是为什么我们只在主要版本发布时才破坏兼容性。您可能熟悉语义化版本控制,这是我们在所有 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 中的一些类标记有@internal
API 文档标签。这些类不稳定,没有向后兼容性承诺。
在次要版本中,可能会向类添加新方法,而现有方法可能会添加新参数。任何新参数都将具有默认值,但如果您已使用不同的签名覆盖了方法,则可能会看到致命错误。在该版本的迁移指南中,将记录添加了新参数的方法。
下表概述了一些用例以及您可以从 CakePHP 中获得的兼容性
如果您… |
向后兼容性? |
---|---|
对该类进行类型提示 |
是 |
创建新实例 |
是 |
扩展该类 |
是 |
访问公共属性 |
是 |
调用公共方法 |
是 |
扩展类,然后… |
|
覆盖公共属性 |
是 |
访问受保护的属性 |
否 [1] |
覆盖受保护的属性 |
否 [1] |
覆盖受保护的方法 |
否 [1] |
调用受保护的方法 |
否 [1] |
添加公共属性 |
否 |
添加公共方法 |
否 |
向覆盖的方法添加参数 |
否 [1] |
向现有方法参数添加默认参数值 |
是 |
如果您正在帮助改进 CakePHP,请在添加/更改功能时牢记以下准则
在次要版本中,您可以
在次要版本中,您可以… |
|
---|---|
类 |
|
移除类 |
否 |
移除接口 |
否 |
移除特性 |
否 |
设置为 final |
否 |
设置为 abstract |
否 |
更改名称 |
是 [2] |
属性 |
|
添加公共属性 |
是 |
移除公共属性 |
否 |
添加受保护的属性 |
是 |
移除受保护的属性 |
是 [3] |
方法 |
|
添加公共方法 |
是 |
移除公共方法 |
否 |
添加受保护的方法 |
是 |
移至父类 |
是 |
移除受保护的方法 |
是 [3] |
降低可见性 |
否 |
更改方法名称 |
是 [2] |
添加带有默认值的新参数 |
是 |
向现有方法添加新的必填参数。 |
否 |
从现有参数中移除默认值 |
否 |
更改方法类型 void |
是 |
在每个次要版本中,都可能会弃用功能。如果弃用了功能,将添加 API 文档和运行时警告。运行时错误可以帮助您定位需要在出现错误之前更新的代码。如果您想禁用运行时警告,可以使用Error.errorLevel
配置值
// in config/app.php
// ...
'Error' => [
'errorLevel' => E_ALL ^ E_USER_DEPRECATED,
]
// ...
将禁用运行时弃用警告。
实验性功能不包括在上述向后兼容性承诺中。实验性功能可能会在次要版本中进行重大更改,只要它们仍然处于实验阶段。实验性功能可以通过手册中的警告和 API 文档中@experimental
的使用来识别。
实验性功能旨在帮助收集有关功能如何工作的反馈,然后再使其稳定。一旦接口和行为已在社区中得到验证,将移除实验性标志。