我们向后兼容的承诺

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.0,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

我们向后兼容的承诺

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

谨慎

这个承诺是在Symfony 2.3中引入的,但不适用于以前的Sym欧宝娱乐app下载地址fony版本。

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

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

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

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

警告

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

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

使用Symf欧宝娱乐app下载地址ony代码

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

使用我们的界面

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

谨慎

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

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

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

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

使用我们的课程

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

谨慎

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

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

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

利用我们的特质

Symfony提供的所有特征都可以在你的职业中欧宝娱乐app下载地址使用。

谨慎

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

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

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

正在Symfony C欧宝娱乐app下载地址ode中工作

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

更改接口

下表告诉你在Symfony的接口上可以做哪些修改:欧宝娱乐app下载地址

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

改变类

下表告诉你在Symfony的类上可以做哪些修改:欧宝娱乐app下载地址

变化类型 改变允许
完全删除 没有
做最后 没有[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的特性上你可以做哪些改变:欧宝娱乐app下载地址

变化类型 改变允许
完全删除 没有
更改名称或命名空间 没有
使用另一个特质 是的
公共属性
添加公共属性 是的
移走公共财产 没有
降低能见度 没有
转向一个常用的特征 是的
受保护的属性
添加受保护属性 是的
移除受保护的属性 没有
降低能见度 没有
张扬 没有
转向一个常用的特征 是的
私有财产
添加私有属性 是的
移走私人财产 没有
公开或保护 是的
转向一个常用的特征 是的
构造函数和析构函数
有构造函数还是析构函数 没有
公共方法
添加公共方法 是的
移除公共方法 没有
改变名字 没有
降低能见度 没有
做最后 没有[6]_
转到常用特质 是的
添加没有默认值的参数 没有
使用默认值添加参数 没有
删除参数 没有
为参数添加默认值 没有
删除参数的默认值 没有
为参数添加类型提示 没有
删除参数的类型提示 没有
改变参数类型 没有
更改返回类型 没有
受保护的方法
添加受保护方法 是的
移除受保护方法 没有
改变名字 没有
降低能见度 没有
做最后 没有[6]_
张扬 没有[8]_
转到常用特质 是的
添加没有默认值的参数 没有
使用默认值添加参数 没有
删除参数 没有
为参数添加默认值 没有
删除参数的默认值 没有
为参数添加类型提示 没有
删除参数的类型提示 没有
改变参数类型 没有
更改返回类型 没有
私有方法
添加私有方法 是的
删除私有方法 没有
改变名字 没有
公开或保护 是的
转到常用特质 是的
添加没有默认值的参数 没有
使用默认值添加参数 没有
删除参数 没有
为参数添加默认值 没有
删除参数的默认值 没有
为参数添加类型提示 没有
删除参数的类型提示 没有
改变参数类型 没有
添加返回类型 没有
删除返回类型 没有
更改返回类型 没有
静态方法和属性
把非静态变成静态 没有
把静态变为非静态 没有
..[1]应该避免。完成后,此更改必须记录在
升级文件。
..[2]添加的父接口不能引入任何新方法
已经存在于接口中。
..只有方法的最后一个参数可以被删除,而PHP不会这样做
关心传递给方法的附加参数。
..当改变父类时,原来的父类必须保持为
类的祖先。
..只有当常数不变时,常数的值才可以改变
用于配置(例如Yaml和XML文件),因为这些不支持常量,必须硬编码值。例如,事件名称常量不能在不引入BC中断的情况下更改值。此外,如果一个常量很可能会在序列化的对象中使用,则不应更改常量的值。
..[7]如果类是final类则允许。类。@final
第一次发布后的注释被认为是下一个主要版本的最终版本。只有在父类型的情况下才能更改参数类型。只有对子类型才能更改返回类型。
..[8]如果方法是final则允许。方法。@final
第一次发布后的注释被认为是下一个主要版本的最终版本。只有在父类型的情况下才能更改参数类型。只有对子类型才能更改返回类型。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。