PHPにおけるOOPの抽象クラス
あなたには User クラスがあり、
そこから Employee クラスと
Student クラスが継承されるとします。
この場合、Employee クラスと Student クラスの
オブジェクトは作成されますが、User クラスの
オブジェクトは作成されません。
なぜなら、このクラスはその継承者の
共通のプロパティとメソッドをグループ化するためだけに
使用されるからです。
この場合、あなたや他のプログラマーが誤って
User クラスのオブジェクトを作成しないよう、
強制的に禁止することができます。
このために、いわゆる 抽象 クラスが存在します。抽象クラスとは、 それらから継承することを目的とした クラスです。ただし、そのようなクラスのオブジェクトは 作成できません。
クラスを抽象として宣言するには、
その宣言時にキーワード
abstract を記述します:
<?php
abstract class User
{
}
?>
それでは、抽象クラス User の
実装を記述してみましょう。プライベート
プロパティ name と、
それに対するゲッターとセッターを持たせます:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
User クラスのオブジェクトを作成しようとすると
エラーが発生します:
<?php
$user = new User; // エラーを出力します
?>
しかし、私たちのクラスから継承することは
可能です。抽象クラス User を継承する
Employee クラスを作成しましょう:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Employee クラスのオブジェクトを作成します -
すべてが動作するはずです:
<?php
$employee = new Employee;
$employee->setName('john'); // 親、すなわちUserクラスのメソッド
$employee->setSalary(1000); // 独自の、すなわちEmployeeクラスのメソッド
echo $employee->getName(); // 'john' と表示されます
echo $employee->getSalary(); // 1000 と表示されます
?>
幾何学的図形を表す抽象クラス Figure を
作成してください。
そこから、円、長方形、正方形のためのクラスを
継承させてください。