0
0

PHP 具象クラス(Abstract class) について

Last updated at Posted at 2024-04-20

具象クラス(Abstract class) について

  • 抽象(Abstract)クラスは classの前に abstractを付ける。
  • abstractクラス内でも普通に publicメソッドとしても定義することは可能。
  • 抽象メソッドを定義する場合は、abstract public function getProduct();というように先頭に abstractを付ける。
  • abstractメソッドの場合、メソッド内に処理を書くことはできない。メソッド名のみの定義になる。
  • 抽象クラスに対してインスタンス化できるクラスを 具象クラス という。sampleの場合は BaseProduct classProduct 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>';
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0