目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「コンストラクタ本体の引き上げ」について書きます。
「コンストラクタ本体の引き上げ」 について
複数のサブクラスに内容がほとんど同一のコンストラクタがある。
しかしコンストラクタでは、この共通の振る舞いがしばしば生成処理なのです。
例
変更前
<?php
class Employee
{
protected $_name;
protected $_id;
}
class Manager extends Employee
{
private $_grade;
public function __construct($name, $id, $grade)
{
$this->_name = $name;
$this->_id = $id;
$this->_grade = $grade;
}
public function getGrade()
{
return $this->_grade;
}
}
$m = new Manager('name', 456, 20);
echo $m->getGrade() . "\n";
変更後
<?php
class Employee2
{
protected $_name;
protected $_id;
protected function __construct($name, $id)
{
$this->_name = $name;
$this->_id = $id;
}
}
class Manager2 extends Employee2
{
private $_grade;
public function __construct($name, $id, $grade)
{
parent::__construct($name, $id);
$this->_grade = $grade;
}
public function getGrade()
{
return $this->_grade;
}
}
$m = new Manager2('name', 456, 20);
echo $m->getGrade() . "\n";