MW211 EXIT

devlog
PHP/アクセス修飾子の組み合わせ(2)
2012年03月01日
protected修飾子の変数を、親と子で同名で使用した場合の挙動を整理した
┌──────────────────────────────────────┐
│class 親 {                                                                  │
│  protected $a = '親';  // →必須ではない                                   │
│  public function method親() {                                              │
│    return $this->a;                                                        │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│class 子 extends 親 {                                                       │
│  protected $a = '子';                                                      │
│  public function method子() {                                              │
│    return $this->a;                                                        │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
親クラスのみを生成した場合は、子クラスは存在しないので当然ながら
親クラスで定義した値が優先される(「$a」の値は「親」)
┌──────────────────────────────────────┐
│$親 = new 親();                                                             │
│echo $親->method親();  // →結果は「親」                                    │
└──────────────────────────────────────┘
子クラスを生成した場合は、子クラスの定義がオーバーライドされるので
子クラスで定義した値が優先される(「$a」の値は「子」)
┌──────────────────────────────────────┐
│$子 = new 子();                                                             │
│echo $子->method親();  // →結果は「子」                                    │
│echo $子->method子();  // →結果は「子」                                    │
└──────────────────────────────────────┘
分類:PHP