PHPのOOPにおけるインターフェースでのコンストラクタ宣言
インターフェースではクラスのコンストラクタも宣言することができます。
例を見てみましょう。2つのパラメータを受け取るコンストラクタと、
面積と周囲長を求めるメソッドを持つ Rectangle クラスを作成することにしたとします。
インターフェースを使用してこのクラスを定義してみましょう:
<?php
interface iRectangle
{
public function __construct($a, $b); // 2つのパラメータを持つコンストラクタ
public function getSquare();
public function getPerimeter();
}
?>
インターフェース iRectangle の実装を書いてみましょう:
<?php
class Rectangle implements iRectangle
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function getSquare()
{
return $this->a * $this->b;
}
public function getPerimeter()
{
return 2 * ($this->a + $this->b);
}
}
?>
インターフェースでコンストラクタを宣言することで何が得られたでしょうか? 第一に、クラスでコンストラクタを実装するのを忘れません。 第二に、インターフェースはクラスのコンストラクタが2つのパラメータを 受け取る必要があることを明示的に示しています:それ以上でもそれ以下でもありません。 これもまた、不注意によるミスから保護してくれます。
なぜコンストラクタを Figure インターフェースに追加するのではなく、
別個のインターフェース iRectangle を作成したのでしょうか?
すべての図形は辺の数が異なり、したがってコンストラクタのパラメータ数も異なるからです。
そのため、長方形専用の、より正確な別のインターフェースを作成する必要がありました。
立方体の図形を記述するインターフェース iCube を作成してください。
このインターフェースは、立方体の一辺をパラメータとして受け取るコンストラクタと、
立方体の体積と表面積を取得するメソッドを記述するものとします。
インターフェース iCube を実装する Cube クラスを作成してください。
ユーザーを記述するインターフェース iUser を作成してください。
ユーザーには名前と年齢があり、これらのフィールドはコンストラクタのパラメータとして
渡されることが想定されています。また、このインターフェースは、
ユーザーが名前と年齢のゲッター(セッターではない)を持つことも定義するものとします。
インターフェース iUser を実装する User クラスを作成してください。