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 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.