我们向后兼容的承诺

编辑本页

我们向后兼容的承诺

确保您的项目顺利升级是我们的首要任务。这就是为什么我们向您承诺所有小型Symfony发行版的向后兼容性(BC)。ob娱乐下载你可能认为这个策略是语义版本控制。简而言之,语义版本控制意味着只有主要版本(如5.0、6.0等)才允许打破向后兼容性。小版本(如5.1、5.2等)可能会引入新特性,但必须在不破坏该版本分支现有API的情况下这样做。X在前面的例子)。

我们还提供了在代码库中触发的弃用消息,以帮助您跨主要版本进行迁移。

然而,向后兼容性有许多不同的形式。事实上,我们对框架所做的几乎每一个更改都有可能破坏应用程序。例如,如果我们向一个类中添加了一个新方法,这将破坏扩展了这个类并添加了相同方法,但方法签名不同的应用程序。

另外,并不是每个BC中断对应用程序代码都有相同的影响。虽然一些BC中断要求您对类或体系结构进行重大更改,但其他中断则通过更改方法的名称来修复。

这就是我们为您创建这个页面的原因。“使用Symfony Code”一节将ob娱乐下载告诉您如何确保您的应用程序在升级到同一主要发布分支的新版本时不会完全崩溃。

第二部分,“Symfony代码”,针对Symfony贡献者。ob娱乐下载本节列出了每个贡献者都需要遵守的详细规则,以确保我们的用户顺利升级。

谨慎

实验特性和标有@internal标签被排除在我们的向后兼容承诺之外。

还要注意,如果需要向后兼容性中断来修复安全问题,那么向后兼容性中断是允许的。

使用Symfob娱乐下载ony代码

如果您在项目中使用Symfony,ob娱乐下载下面的指导方针将帮助您确保顺利升级到您的Symfony版本的所有后续小版本。

使用我们的界面

Symfony附带的所有接口都可以在类型提示中使用。ob娱乐下载您还可以调用它们声明的任何方法。我们保证不会破坏遵守这些规则的代码。

谨慎

该规则的例外是带有@internal。不应该使用或实现这样的接口。

如果你实现了一个接口,我们保证永远不会破坏你的代码。

下表详细解释了我们的向后兼容性承诺所涵盖的用例:

用例 向后兼容性
如果你…… 那么我们保证BC…
在接口上键入提示 是的
调用一个方法 是的[10]
如果你实现接口并且… 那么我们保证BC…
实现一个方法 是的
向已实现的方法添加参数 是的
为参数添加默认值 是的
向已实现的方法添加返回类型 是的

使用我们的课程

Symfony提供的所有类都可以通过它们的公共方ob娱乐下载法和属性进行实例化和访问。

谨慎

包含标记的类、属性和方法@internal以及各个类所处的位置* \ \测试名称空间是这个规则的一个例外。它们仅供内部使用,不应由您自己的代码访问。

为了安全起见,请检查下表,以了解我们的向后兼容性承诺涵盖哪些用例:

用例 向后兼容性
如果你…… 那么我们保证BC…
在类上键入提示 是的
创建一个新实例 是的
扩展类 是的
进入公共场所 是的
调用一个公共方法 是的[10]
如果您扩展类并…… 那么我们保证BC…
访问受保护的属性 是的
调用受保护的方法 是的[10]
重写公共属性 是的
重写受保护的属性 是的
重写一个公共方法 是的
重写受保护的方法 是的
添加一个新属性 没有
添加一个新方法 没有
向重写的方法添加参数 是的
为参数添加默认值 是的
调用一个私有方法(通过反射) 没有
访问私有属性(通过反射) 没有

利用我们的特质

Symfony提供的所有特征都可以在你的职业中ob娱乐下载使用。

谨慎

这个规则的例外是带有@internal。这样的特征不应该被使用。

为了安全起见,请检查下表,以了解我们的向后兼容性承诺涵盖哪些用例:

用例 向后兼容性
如果你…… 那么我们保证BC…
使用一个特质 是的
如果你用这个特质… 那么我们保证BC…
使用它来实现接口 是的
使用它来实现一个抽象方法 是的
使用它来扩展父类 是的
使用它来定义一个抽象类 是的
使用公共、受保护或私人财产 是的
使用公共的、受保护的或私有的方法 是的

正在Symfony Cob娱乐下载ode中工作

你想帮我们改进Symfony吗?ob娱乐下载太好了!但是,请遵守以下列出的规则,以确保我们的用户顺利升级。

更改接口

下表告诉你在Symfony的接口上可以做哪些修改:ob娱乐下载

变化类型 改变允许 笔记
完全删除 没有
更改名称或命名空间 没有
添加父接口 是的 [2]
删除父接口 没有
方法
添加方法 没有
删除方法 没有
改变名字 没有
移动到父接口 是的
添加没有默认值的参数 没有
使用默认值添加参数 没有
删除参数 没有 [3]
为参数添加默认值 没有
删除参数的默认值 没有
为参数添加类型提示 没有
删除参数的类型提示 没有
改变参数类型 没有
添加返回类型 没有
删除返回类型 没有 [9]
更改返回类型 没有
静态方法
把非静态变成静态 没有
把静态变为非静态 没有
常量
添加常数 是的
删除常数 没有
常数的变化值 是的 [1][5]

改变类

下表告诉你在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娱乐下载

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.0支持通过SensioLabs