🐘
PHP で private のプロパティを追加したら、 extends 先のプロパティを上書きはしないのか
PHPでprivateのプロパティを親クラスに追加した場合、子クラス(extends先)で同じ名前のprivateプロパティを定義しても「上書き(オーバーライド)」にはなりません。
親クラスと子クラスで同じ名前のprivateプロパティが存在した場合、それぞれのクラスごとに独立したプロパティとして扱われます。つまり、親クラスのprivateプロパティと子クラスのprivateプロパティは別物であり、同時に共存します。
挙動の例
class ParentClass {
private $value = 1;
}
class ChildClass extends ParentClass {
private $value = 2;
}
$obj = new ChildClass();
var_dump($obj);
この場合、$obj
の中には
["value":"ParentClass":private] => 1
["value":"ChildClass":private] => 2
のように、親クラスと子クラスで別々のプロパティが存在します。
補足
- privateプロパティは「そのクラス内でのみ」アクセス可能で、子クラスからはアクセスできません。
- 上書きされるのはpublicやprotectedの場合で、privateの場合は「同名であっても別物」として扱われます。
結論
PHPでprivateのプロパティを追加しても、extends先(子クラス)のプロパティを上書きすることはありません。それぞれのクラスで独立して存在します。
Discussion