具象クラス(Abstract class) について
- 抽象(Abstract)クラスは
class
の前にabstract
を付ける。 -
abstract
クラス内でも普通にpublic
メソッドとしても定義することは可能。 - 抽象メソッドを定義する場合は、
abstract public function getProduct();
というように先頭にabstract
を付ける。 - abstractメソッドの場合、メソッド内に処理を書くことはできない。メソッド名のみの定義になる。
- 抽象クラスに対してインスタンス化できるクラスを
具象クラス
という。sampleの場合はBaseProduct class
とProduct class
がインスタンス化できるので具象クラス
になる。 - 具象クラスでは Abstractクラスを継承すると、必ず abstractメソッドを使用しなくてはならなくなる。使用しない場合は、エラーになる。
● abstract
クラスを利用した例
sample.php
<?php
// 抽象クラス
abstract class ProductAbstract
{
public function echoProduct() // 普通にpublicとしても使うことができる
{
echo '親クラスです';
}
// 先頭にabstractと付けると抽象メソッドになる
abstract public function getProduct(); // abstractにするとメソッド名しか定義できない
}
// 具象クラス、親クラス・基底クラス・スーパークラス
class BaseProduct
{
public function echoProduct()
{
echo '親クラスです';
}
public function getProduct()
{
echo '親の関数です';
}
}
// 具象クラス、子クラス
class Product extends ProductAbstract // 抽象クラスのProductAbstractを継承
{
private $product = [];
function __construct($product)
{
$this->product = $product;
}
// 抽象クラスを継承した場合、抽象メソッドを使用しなくてはならない。使用していない場合はエラーになる
public function getProduct() // 具象化
{
echo $this->product;
}
public function addProduct($item)
{
$this->product .= $item;
}
// staticは静的関数
public static function getStaticProduct($str)
{
echo $str;
}
}
$instance = new Product('テスト');
var_dump($instance);
echo '<br>';
$instance->getProduct();
echo '<br>';
$instance->echoProduct();
echo '<br>';
$instance->addProduct('追加分');
echo '<br>';
$instance->getProduct();
echo '<br>';
Product::getStaticProduct('静的');
echo '<br>';