# 後方互換性 私たちは `2.x.y.Z` のようなパッチリリースにおいては厳密に後方互換性を保持するように努めるとともに、 `2.x.Y` のようなマイナーリリースにおいても修正が必要となるような後方互換性の無い変更を避けるように努めています。 バージョン番号については [Yii バージョン規約](versions.md) を参照して下さい。 ## 使用 ### インターフェイス ユースケース | 後方互換? -------------|---------- インターフェイスのタイプヒント | Yes インターフェイス・メソッドの呼び出し | Yes **インターフェイスの実装における ...** | メソッドの実装 | Yes 実装済みメソッドへの引数の追加 | Yes 引数のデフォルト値の追加 | Yes ### クラス ユースケース | 後方互換? -------------|---------- クラスのタイプヒント | Yes 新しいインスタンスの作成 | Yes クラスの拡張 | Yes パブリック・プロパティへのアクセス | Yes パブリック・メソッドの呼び出し | Yes **クラスの拡張における ...** | プロテクト・プロパティへのアクセス | Yes プロテクト・メソッドの呼び出し | Yes パブリック・プロパティのオーバーライド | Yes プロテクト・プロパティのオーバーライド | Yes パブリック・メソッドのオーバーライド | Yes プロテクト・メソッドのオーバーライド | Yes 新しいプロパティの追加 | No 新しいメソッドの追加 | No オーバーライドされたメソッドへの引数の追加 | Yes 引数のデフォルト値の追加 | Yes プライベート・メソッドの呼び出し(リフレクション経由) | No プライベート・プロパティへのアクセス(リフレクション経由) | No ## 開発 ### インターフェイスの変更 変更のタイプ | 後方互換? -------------|---------- 削除 | No 名前または名前空間の変更 | No 親のインターフェイスの追加 | 新しいメソッドが追加されなければ Yes 親のインターフェイスの削除 | No **インターフェイス・メソッド** | メソッドの追加 | No メソッドの削除 | No 名前の変更 | No 親のインターフェイスへの移動 | Yes デフォルト値を持たない引数の追加 | No デフォルト値を持つ引数の追加 | No 引数の削除 | Yes (末尾の一つまたは複数の引数のみ) 引数のデフォルト値の追加 | No 引数のデフォルト値の削除 | No 引数のタイプヒントの追加 | No 引数のタイプヒントの削除 | No 引数の型の変更 | No 戻り値の型の変更 | No **定数** | 定数の追加 | Yes 定数の削除 | No 定数の値の変更 | シリアライズされる可能性のあるオブジェクトを除いて Yes。UPGRADE.md への記載が必須 ### クラス 変更のタイプ | 後方互換? -------------|---------- 削除 | No final への変更 | No abstract への変更 | No 名前または名前空間の変更 | No 親クラスの変更 | Yes ただし元の親クラスは祖先クラス(祖父母クラスなど)として残らなければならない インターフェイスの追加 | Yes インターフェイスの削除 | No **パブリック・プロパティ** | パブリック・プロパティの追加 | Yes パブリック・プロパティの削除 | No 可視性の低減 | No 親クラスへの移動 | Yes **プロテクト・プロパティ** | プロテクト・プロパティの追加 | Yes プロテクト・プロパティの削除 | No 可視性の低減 | No 親クラスへの移動 | Yes **プライベート・プロパティ** | プライベート・プロパティの追加 | Yes プライベート・プロパティの削除 | Yes **コンストラクター** | コンストラクターの削除 | No パブリック・コンストラクターの可視性低減 | No プロテクト・コンストラクターの可視性低減 | No 親クラスへの移動 | Yes **パブリック・メソッド** | パブリック・メソッドの追加 | Yes パブリック・メソッドの削除 | No 名前の変更 | No 可視性の低減 | No 親クラスへの移動 | Yes デフォルト値を持たない引数の追加 | No デフォルト値を持つ引数の追加 | No 引数の削除 | Yes (末尾の一つまたは複数の引数のみ) 引数のデフォルト値の追加 | No 引数のデフォルト値の削除 | No 引数のタイプヒントの追加 | No 引数のタイプヒントの削除 | No 引数の型の変更 | No 戻り値の型の変更 | No **プロテクト・メソッド** | プロテクト・メソッドの追加 | Yes プロテクト・メソッドの削除 | No 名前の変更 | No 可視性の低減 | No 親クラスへの移動 | Yes デフォルト値を持たない引数の追加 | No デフォルト値を持つ引数の追加 | No 引数の削除 | Yes (末尾の一つまたは複数の引数のみ) 引数のデフォルト値の追加 | No 引数のデフォルト値の削除 | No 引数のタイプヒントの追加 | No 引数のタイプヒントの削除 | No 引数の型の変更 | No 戻り値の型の変更 | No **プライベート・メソッド** | プライベート・メソッドの追加 | Yes プライベート・メソッドの削除 | Yes 名前の変更 | Yes デフォルト値を持たない引数の追加 | Yes デフォルト値を持つ引数の追加 | Yes 引数の削除 | Yes 引数のデフォルト値の追加 | Yes 引数のデフォルト値の削除 | Yes 引数のタイプヒントの追加 | Yes 引数のタイプヒントの削除 | Yes 引数の方の変更 | Yes 戻り値の型の変更 | Yes **スタティック・メソッド** | 非スタティックなメソッドのスタティックへの変更 | No スタティックなメソッドの非スタティックへの変更 | No **定数** | 定数の追加 | Yes 定数の削除 | No 定数の値の変更 | シリアライズされる可能性のあるオブジェクトを除いて Yes。UPGRADE.md への記載が必須