我们承诺的向后兼容性
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
我们承诺的向后兼容性
确保顺利升级您的项目是我们的首要任务。这就是为什么我们向你保证向后兼容(BC)为所有小Symfony版本。ob娱乐下载你可能认识这个策略语义版本控制。简而言之,语义版本控制意味着只有主要版本(如2.0、3.0等)可以打破向后兼容性。小版本(如2.5、2.6等)可能会引入新功能,但必须这样做,而不会破坏现有的API的发布分支(2。x在前面的例子)。
谨慎
介绍了这一承诺,Symfony 2.3和不适用于Symfony的先ob娱乐下载前版本。
然而,有许多不同口味的向后兼容性。事实上,几乎每一个变化,我们让应用程序框架可以打破。例如,如果我们添加一个新的方法来一个类,这将打破一个应用程序扩展这个类并添加相同的方法,但用不同的方法签名。
而且,并不是每一个公元前打破对应用程序代码有相同的影响。虽然一些公元前休息需要你做出重大改变你的类或结构,其他人都是固定的,像改变一个方法的名称。
这就是为什么我们创建这个页面。“使用Symfony的代码”一节将告诉ob娱乐下载你如何确保应用程序不会打破完全升级到新版本时相同的主要发布分支。
第二部分,“在Symfony的代码”,是针对Symfony的贡献ob娱乐下载者。本节列出了详细的规则,每个贡献者需要遵循以确保顺利升级为我们的用户。
使用Symfob娱乐下载ony的代码
如果你使用Symfony项目,下面ob娱乐下载的指南将帮助你确保所有未来的小版本升级你的Symfony的版本。
使用我们的接口
附带Symfony可用于所有接口类型提示。ob娱乐下载你也可以调用任何方法的声明。我们保证我们不会打破坚持这些规则的代码。
谨慎
这个规则的例外是接口标记@internal
。不应使用这种接口或实现。
如果你实现一个接口,我们保证我们不会打破你的代码。
下表详细解释用例是由我们的向后兼容性承诺:
用例 | 向后兼容性 |
---|---|
如果你…… | 然后我们保证公元前… |
类型提示界面 | 是的 |
调用一个方法 | 是的 |
如果你实现接口和… | 然后我们保证公元前… |
实现一个方法 | 是的 |
添加一个参数的实现方法 | 是的 |
添加一个参数的默认值 | 是的 |
添加一个返回类型的方法实现 | 是的 |
使用我们的类
Symfony提供的所有类可以实例化并通过其公共ob娱乐下载访问的方法和属性。
谨慎
类、属性和方法,标签@internal
以及位于不同的类*
名称空间是一个例外。他们是仅供内部使用,不应由您自己的代码访问。
安全起见,检查下面的表,知道哪些用例是由我们的向后兼容性承诺:
用例 | 向后兼容性 |
---|---|
如果你…… | 然后我们保证公元前… |
对类类型提示 | 是的 |
创建一个新的实例 | 是的 |
扩展的类 | 是的 |
访问公共财产 | 是的 |
调用公共方法 | 是的 |
如果你扩展类和… | 然后我们保证公元前… |
访问受保护的属性 | 是的 |
调用一个受保护的方法 | 是的 |
覆盖一个公共财产 | 是的 |
覆盖一个受保护的属性 | 是的 |
覆盖一个公共方法 | 是的 |
覆盖一个受保护的方法 | 是的 |
添加一个新的属性 | 没有 |
添加一个新的方法 | 没有 |
一个覆盖方法添加一个参数 | 是的 |
添加一个参数的默认值 | 是的 |
通过反射调用私有方法() | 没有 |
访问私有财产(通过反射) | 没有 |
用我们的品质
Symfony提供的所有特征可以使用在你的类。ob娱乐下载
谨慎
这个规则的例外是特征标记@internal
。这样的特质不应使用。
安全起见,检查下面的表,知道哪些用例是由我们的向后兼容性承诺:
用例 | 向后兼容性 |
---|---|
如果你…… | 然后我们保证公元前… |
使用一个特征 | 是的 |
如果你使用特征和… | 然后我们保证公元前… |
用它来实现一个接口 | 是的 |
用它来实现一个抽象方法 | 是的 |
用它来扩展一个父类 | 是的 |
使用它来定义一个抽象类 | 是的 |
使用一个公共、保护或私有财产 | 是的 |
使用一个公共、保护或私有方法 | 是的 |
在Symfony的代码ob娱乐下载
你想帮助我们提高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]应该避免。当完成时,这种变化必须被记录下来
- 升级文件。
- . .[2]添加父接口必须不引入任何新方法不
- 在接口中已经存在。
- . .[3]只有最后一个参数(s)的一个方法可能会被删除,因为PHP不
- 关心附加参数传递给方法。
- . .[4]改变父类时,原来的父类必须保持一个
- 类的祖先。
- . .[5]一个常数的价值可能只是改变了常数时没有
- 用于配置(例如Yaml和XML文件),因为这些不支持常量和硬编码的值。例如,事件名称常量不能改变值没有引入BC打破。此外,如果一个常数可能会用于序列化的对象,一个常数的价值不应改变。
-
. .[7]允许如果类是终局的。类,收到了
@final
- 注释后第一个版本被认为是最终在他们的下一个主要版本。只改变一个参数类型是可能的父类型。改变一个返回类型是唯一可能的子类型。
-
. .[8]允许如果方法是终局的。方法,收到了
@final
- 注释后第一个版本被认为是最终在他们的下一个主要版本。只改变一个参数类型是可能的父类型。改变一个返回类型是唯一可能的子类型。