Alexander Makarov
7 years ago
3 changed files with 177 additions and 26 deletions
@ -0,0 +1,152 @@
|
||||
# Backwards Compatibility |
||||
|
||||
We're strictly not breaking backwards compatibility in patch releases such as `2.x.y.Z` and trying to avoid had to fix |
||||
backwards incompatible changes in minor releases such as `2.x.Y`. |
||||
|
||||
Check [Yii Versioning](versions.md) to learn about version numbering. |
||||
|
||||
## Usage |
||||
|
||||
### Interfaces |
||||
|
||||
Use case | BC? |
||||
---------|---- |
||||
Type hint with the interface | Yes |
||||
Call the interface method | Yes |
||||
**Implement the interface and...** | |
||||
Implement method | Yes |
||||
Add argument to method implemented | Yes |
||||
Add default value to an argument | Yes |
||||
|
||||
### Classes |
||||
|
||||
Use case | BC? |
||||
---------|---- |
||||
Type hint with the class | Yes |
||||
Create a new instance | Yes |
||||
Extend the class | Yes |
||||
Access a public property | Yes |
||||
Call a public method | Yes |
||||
**Extend the class and...** | |
||||
Access a protected property | Yes |
||||
Call a protected method | Yes |
||||
Override a public property | Yes |
||||
Override a protected property | Yes |
||||
Override a public method | Yes |
||||
Override a protected method | Yes |
||||
Add a new property | No |
||||
Add a new method | No |
||||
Add an argument to an overridden method | Yes |
||||
Add a default value to an argument | Yes |
||||
Call a private method (via Reflection) | No |
||||
Access a private property (via Reflection) | No |
||||
|
||||
|
||||
## Development |
||||
|
||||
### Changing interfaces |
||||
|
||||
Type of change | BC? |
||||
---------------|---- |
||||
Remove | No |
||||
Change name or namespace | No |
||||
Add parent interface | Yes if no new methods are added |
||||
Remove parent interface | No |
||||
**Interface methods** | |
||||
Add method | No |
||||
Remove method | No |
||||
Change name | No |
||||
Move to parent interface | Yes |
||||
Add argument without a default value | No |
||||
Add argument with a default value | No |
||||
Remove argument | Yes (only last ones) |
||||
Add default value to an argument | No |
||||
Remove default value of an argument | No |
||||
Add type hint to an argument | No |
||||
Remove type hint of an argument | No |
||||
Change argument type | No |
||||
Change return type | No |
||||
**Constants** | |
||||
Add constant | Yes |
||||
Remove constant | No |
||||
Change value of a constant | Yes except objects that are likely to be serialized. Mandatory to document in UPGRADE.md. |
||||
|
||||
### Classes |
||||
|
||||
Type of change | BC? |
||||
---------------|---- |
||||
Remove | No |
||||
Make final | No |
||||
Make abstract | No |
||||
Change name or namespace | No |
||||
Change parent class | Yes but original parent class must remain an ancestor of the class. |
||||
Add interface | Yes |
||||
Remove interface | No |
||||
**Public Properties** | |
||||
Add public property | Yes |
||||
Remove public property | No |
||||
Reduce visibility | No |
||||
Move to parent class | Yes |
||||
**Protected Properties** | |
||||
Add protected property | Yes |
||||
Remove protected property | No |
||||
Reduce visibility | No |
||||
Move to parent class | Yes |
||||
**Private Properties** | |
||||
Add private property | Yes |
||||
Remove private property | Yes |
||||
**Constructors** | |
||||
Remove constructor | No |
||||
Reduce visibility of a public constructor | No |
||||
Reduce visibility of a protected constructor | No |
||||
Move to parent class | Yes |
||||
**Public Methods** | |
||||
Add public method | Yes |
||||
Remove public method | No |
||||
Change name | No |
||||
Reduce visibility | No |
||||
Move to parent class | Yes |
||||
Add argument without a default value | No |
||||
Add argument with a default value | No |
||||
Remove arguments | Yes, only last ones |
||||
Add default value to an argument | No |
||||
Remove default value of an argument | No |
||||
Add type hint to an argument | No |
||||
Remove type hint of an argument | No |
||||
Change argument type | No |
||||
Change return type | No |
||||
**Protected Methods** | |
||||
Add protected method | Yes |
||||
Remove protected method | No |
||||
Change name | No |
||||
Reduce visibility | No |
||||
Move to parent class | Yes |
||||
Add argument without a default value | No |
||||
Add argument with a default value | No |
||||
Remove arguments | Yes, only last ones |
||||
Add default value to an argument | No |
||||
Remove default value of an argument | No |
||||
Add type hint to an argument | No |
||||
Remove type hint of an argument | No |
||||
Change argument type | No |
||||
Change return type | No |
||||
**Private Methods** | |
||||
Add private method | Yes |
||||
Remove private method | Yes |
||||
Change name | Yes |
||||
Add argument without a default value | Yes |
||||
Add argument with a default value | Yes |
||||
Remove argument | Yes |
||||
Add default value to an argument | Yes |
||||
Remove default value of an argument | Yes |
||||
Add type hint to an argument | Yes |
||||
Remove type hint of an argument | Yes |
||||
Change argument type | Yes |
||||
Change return type | Yes |
||||
**Static Methods** | |
||||
Turn non static into static | No |
||||
Turn static into non static | No |
||||
**Constants** | |
||||
Add constant | Yes |
||||
Remove constant | No |
||||
Change value of a constant | Yes except objects that are likely to be serialized. Mandatory to document in UPGRADE.md. |
Loading…
Reference in new issue