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