MW211 EXIT

devlog
PHP/アクセス修飾子の組み合わせ(4)
2012年03月03日
なんともっと簡単にアクセス修飾子の挙動を把握できる方法があった。
生成したクラスを「print_r()」で中身を表示すればよいのだ

例えば、
┌──────────────────────────────────────┐
│class 親 {                                                                  │
│  public $a = '親';  ←★                                                   │
│}                                                                           │
├──────────────────────────────────────┤
│class 子 extends 親 {                                                       │
│  public $a = '子';  ←★                                                   │
│}                                                                           │
└──────────────────────────────────────┘
上記のように同名で変数を定義し、以下のように「print_r()」すると
┌──────────────────────────────────────┐
│$子 = new 子();                                                             │
│print_r((array)$子);                                                        │
└──────────────────────────────────────┘
結果は「Array ( [a] => 子 )」となる。

ではそれぞれのパターンでは?(×はエラー)
┌─────┬─────┬─────┬─────┬─────┐
│  親\子  │(定義なし)│   private│ protected│    public│
├─────┼─────┼─────┼─────┼─────┤
│          │    ×    │[子a]=> 子│[*a] => 子│[a]  => 子│
│(定義なし)│          │          │          │          │
├─────┼─────┼─────┼─────┼─────┤
│          │    ×    │[子a]=> 子│[*a] => 子│[a]  => 子│
│private   │          │[親a]=> 親│[親a]=> 親│[親a]=> 親│
├─────┼─────┼─────┼─────┼─────┤
│          │          │    ×    │[*a] => 子│[a]  => 子│
│protected │[*a] => 親│          │          │          │
├─────┼─────┼─────┼─────┼─────┤
│          │          │    ×    │    ×    │[a]  => 子│
│public    │[a]  => 親│          │          │          │
└─────┴─────┴─────┴─────┴─────┘
分類:PHP