我们向后兼容的承诺
编辑本页我们向后兼容的承诺
确保您的项目顺利升级是我们的首要任务。这就是为什么我们向您承诺所有小型Symfony发行版的向后兼容性(BC)。ob娱乐下载你可能认为这个策略是语义版本控制。简而言之,语义版本控制意味着只有主要版本(如5.0、6.0等)才允许打破向后兼容性。小版本(如5.1、5.2等)可能会引入新特性,但必须在不破坏该版本分支现有API的情况下这样做。X在前面的例子)。
我们还提供了在代码库中触发的弃用消息,以帮助您跨主要版本进行迁移。
然而,向后兼容性有许多不同的形式。事实上,我们对框架所做的几乎每一个更改都有可能破坏应用程序。例如,如果我们向一个类中添加了一个新方法,这将破坏扩展了这个类并添加了相同方法,但方法签名不同的应用程序。
另外,并不是每个BC中断对应用程序代码都有相同的影响。虽然一些BC中断要求您对类或体系结构进行重大更改,但其他中断则通过更改方法的名称来修复。
这就是我们为您创建这个页面的原因。“使用Symfony Code”一节将ob娱乐下载告诉您如何确保您的应用程序在升级到同一主要发布分支的新版本时不会完全崩溃。
第二部分,“Symfony代码”,针对Symfony贡献者。ob娱乐下载本节列出了每个贡献者都需要遵守的详细规则,以确保我们的用户顺利升级。
使用Symfob娱乐下载ony代码
如果您在项目中使用Symfony,ob娱乐下载下面的指导方针将帮助您确保顺利升级到您的Symfony版本的所有后续小版本。
使用我们的界面
Symfony附带的所有接口都可以在类型提示中使用。ob娱乐下载您还可以调用它们声明的任何方法。我们保证不会破坏遵守这些规则的代码。
谨慎
该规则的例外是带有@internal
。不应该使用或实现这样的接口。
如果你实现了一个接口,我们保证永远不会破坏你的代码。
下表详细解释了我们的向后兼容性承诺所涵盖的用例:
用例 | 向后兼容性 |
---|---|
如果你…… | 那么我们保证BC… |
在接口上键入提示 | 是的 |
调用一个方法 | 是的[10] |
如果你实现接口并且… | 那么我们保证BC… |
实现一个方法 | 是的 |
向已实现的方法添加参数 | 是的 |
为参数添加默认值 | 是的 |
向已实现的方法添加返回类型 | 是的 |
使用我们的课程
Symfony提供的所有类都可以通过它们的公共方ob娱乐下载法和属性进行实例化和访问。
谨慎
包含标记的类、属性和方法@internal
以及各个类所处的位置* \ \测试
名称空间是这个规则的一个例外。它们仅供内部使用,不应由您自己的代码访问。
为了安全起见,请检查下表,以了解我们的向后兼容性承诺涵盖哪些用例:
利用我们的特质
Symfony提供的所有特征都可以在你的职业中ob娱乐下载使用。
谨慎
这个规则的例外是带有@internal
。这样的特征不应该被使用。
为了安全起见,请检查下表,以了解我们的向后兼容性承诺涵盖哪些用例:
用例 | 向后兼容性 |
---|---|
如果你…… | 那么我们保证BC… |
使用一个特质 | 是的 |
如果你用这个特质… | 那么我们保证BC… |
使用它来实现接口 | 是的 |
使用它来实现一个抽象方法 | 是的 |
使用它来扩展父类 | 是的 |
使用它来定义一个抽象类 | 是的 |
使用公共、受保护或私人财产 | 是的 |
使用公共的、受保护的或私有的方法 | 是的 |
正在Symfony Cob娱乐下载ode中工作
你想帮我们改进Symfony吗?ob娱乐下载太好了!但是,请遵守以下列出的规则,以确保我们的用户顺利升级。
更改接口
下表告诉你在Symfony的接口上可以做哪些修改:ob娱乐下载
改变类
下表告诉你在Symfony的类上可以做哪些修改:ob娱乐下载
变化类型 | 改变允许 | 笔记 |
---|---|---|
完全删除 | 没有 | |
做最后 | 没有 | [6] |
使抽象的 | 没有 | |
更改名称或命名空间 | 没有 | |
更改父类 | 是的 | [4] |
添加接口 | 是的 | |
删除接口 | 没有 | |
公共属性 | ||
添加公共属性 | 是的 | |
移走公共财产 | 没有 | |
降低能见度 | 没有 | |
移动到父类 | 是的 | |
受保护的属性 | ||
添加受保护属性 | 是的 | |
移除受保护的属性 | 没有 | [7] |
降低能见度 | 没有 | [7] |
张扬 | 没有 | [7] |
移动到父类 | 是的 | |
私有财产 | ||
添加私有属性 | 是的 | |
公开或保护 | 是的 | |
移走私人财产 | 是的 | |
构造函数 | ||
添加不带强制参数的构造函数 | 是的 | [1] |
删除构造函数 | 没有 | |
降低公共构造函数的可见性 | 没有 | |
降低受保护构造函数的可见性 | 没有 | [7] |
移动到父类 | 是的 | |
析构函数 | ||
添加析构函数 | 是的 | |
把析构函数 | 没有 | |
移动到父类 | 是的 | |
公共方法 | ||
添加公共方法 | 是的 | |
移除公共方法 | 没有 | |
改变名字 | 没有 | |
降低能见度 | 没有 | |
做最后 | 没有 | [6] |
移动到父类 | 是的 | |
添加没有默认值的参数 | 没有 | |
使用默认值添加参数 | 没有 | [7][8] |
删除参数 | 没有 | [3] |
为参数添加默认值 | 没有 | [7][8] |
删除参数的默认值 | 没有 | |
为参数添加类型提示 | 没有 | [7][8] |
删除参数的类型提示 | 没有 | [7][8] |
改变参数类型 | 没有 | [7][8] |
添加返回类型 | 没有 | [7][8] |
删除返回类型 | 没有 | [7][8][9] |
更改返回类型 | 没有 | [7][8] |
受保护的方法 | ||
添加受保护方法 | 是的 | |
移除受保护方法 | 没有 | [7] |
改变名字 | 没有 | [7] |
降低能见度 | 没有 | [7] |
做最后 | 没有 | [6] |
张扬 | 没有 | [7][8] |
移动到父类 | 是的 | |
添加没有默认值的参数 | 没有 | [7] |
使用默认值添加参数 | 没有 | [7][8] |
删除参数 | 没有 | [3] |
为参数添加默认值 | 没有 | [7][8] |
删除参数的默认值 | 没有 | [7] |
为参数添加类型提示 | 没有 | [7][8] |
删除参数的类型提示 | 没有 | [7][8] |
改变参数类型 | 没有 | [7][8] |
添加返回类型 | 没有 | [7][8] |
删除返回类型 | 没有 | [7][8][9] |
更改返回类型 | 没有 | [7][8] |
私有方法 | ||
添加私有方法 | 是的 | |
删除私有方法 | 是的 | |
改变名字 | 是的 | |
公开或保护 | 是的 | |
添加没有默认值的参数 | 是的 | |
使用默认值添加参数 | 是的 | |
删除参数 | 是的 | |
为参数添加默认值 | 是的 | |
删除参数的默认值 | 是的 | |
为参数添加类型提示 | 是的 | |
删除参数的类型提示 | 是的 | |
改变参数类型 | 是的 | |
添加返回类型 | 是的 | |
删除返回类型 | 是的 | |
更改返回类型 | 是的 | |
静态方法和属性 | ||
把非静态变成静态 | 没有 | [7][8] |
把静态变为非静态 | 没有 | |
常量 | ||
添加常数 | 是的 | |
删除常数 | 没有 | |
常数的变化值 | 是的 | [1][5] |
变化的特征
这个表格告诉你在Symfony的特性上你可以做哪些改变:ob娱乐下载
变化类型 | 改变允许 | 笔记 |
---|---|---|
完全删除 | 没有 | |
更改名称或命名空间 | 没有 | |
使用另一个特质 | 是的 | |
公共属性 | ||
添加公共属性 | 是的 | |
移走公共财产 | 没有 | |
降低能见度 | 没有 | |
转向一个常用的特征 | 是的 | |
受保护的属性 | ||
添加受保护属性 | 是的 | |
移除受保护的属性 | 没有 | |
降低能见度 | 没有 | |
张扬 | 没有 | |
转向一个常用的特征 | 是的 | |
私有财产 | ||
添加私有属性 | 是的 | |
移走私人财产 | 没有 | |
公开或保护 | 是的 | |
转向一个常用的特征 | 是的 | |
构造函数和析构函数 | ||
有构造函数还是析构函数 | 没有 | |
公共方法 | ||
添加公共方法 | 是的 | |
移除公共方法 | 没有 | |
改变名字 | 没有 | |
降低能见度 | 没有 | |
做最后 | 没有 | [6] |
转到常用特质 | 是的 | |
添加没有默认值的参数 | 没有 | |
使用默认值添加参数 | 没有 | |
删除参数 | 没有 | |
为参数添加默认值 | 没有 | |
删除参数的默认值 | 没有 | |
为参数添加类型提示 | 没有 | |
删除参数的类型提示 | 没有 | |
改变参数类型 | 没有 | |
更改返回类型 | 没有 | |
受保护的方法 | ||
添加受保护方法 | 是的 | |
移除受保护方法 | 没有 | |
改变名字 | 没有 | |
降低能见度 | 没有 | |
做最后 | 没有 | [6] |
张扬 | 没有 | [8] |
转到常用特质 | 是的 | |
添加没有默认值的参数 | 没有 | |
使用默认值添加参数 | 没有 | |
删除参数 | 没有 | |
为参数添加默认值 | 没有 | |
删除参数的默认值 | 没有 | |
为参数添加类型提示 | 没有 | |
删除参数的类型提示 | 没有 | |
改变参数类型 | 没有 | |
更改返回类型 | 没有 | |
私有方法 | ||
添加私有方法 | 是的 | |
删除私有方法 | 没有 | |
改变名字 | 没有 | |
公开或保护 | 是的 | |
转到常用特质 | 是的 | |
添加没有默认值的参数 | 没有 | |
使用默认值添加参数 | 没有 | |
删除参数 | 没有 | |
为参数添加默认值 | 没有 | |
删除参数的默认值 | 没有 | |
为参数添加类型提示 | 没有 | |
删除参数的类型提示 | 没有 | |
改变参数类型 | 没有 | |
添加返回类型 | 没有 | |
删除返回类型 | 没有 | |
更改返回类型 | 没有 | |
静态方法和属性 | ||
把非静态变成静态 | 没有 | |
把静态变为非静态 | 没有 |
笔记
[1]应该避免。完成后,必须在UPGRADE文件中记录此更改。
[2]添加的父接口不能引入接口中已经不存在的任何新方法。
[3]只有方法的最后一个可选参数可以被删除,因为PHP并不关心传递给方法的其他参数。
[4]当更改父类时,原来的父类必须保持为类的祖先。
[5]常量的值只有在配置中不使用时才可以更改(例如Yaml和XML文件),因为这些文件不支持常量,必须硬编码该值。例如,事件名称常量不能在不引入BC中断的情况下更改值。此外,如果一个常量很可能会在序列化的对象中使用,则不应更改常量的值。
[6]允许使用@final
注释。
[7]如果课程是最终课程,则允许。类。@final
第一次发布后的注释被认为是下一个主要版本的最终版本。只有在父类型的情况下才能更改参数类型。只有对子类型才能更改返回类型。
[8]如果该方法是最终的,则允许。方法。@final
第一次发布后的注释被认为是下一个主要版本的最终版本。只有在父类型的情况下才能更改参数类型。只有对子类型才能更改返回类型。
[9]允许无效
返回类型。
[10]参数名仅由Attribute类的构造函数的兼容性承诺覆盖。在升级到新的Symfony版本时,使用PHP命名参数可能会破坏代码。ob娱乐下载