2021/12/19
開発をする上で疎結合(そけつごう)なコードで書くことは重要です。
疎結合では、個々のコンポーネント同士は相互に連携しているが、相互に依存している余地が少ない。
出典:IT用語辞典 Weblio辞書
つまり「テストがし易い」ということです。
「疎結合」なコードにするために「抽象化」という考えが大切です。
これはLaravelで開発をする上でも重要です。
PHPによる抽象化は「abstract」と「interface」があります。
今回は「abstract」についてエントリーします。
概念
抽象クラスとはインスタンス化ができないクラスのことです。
自身をインスタンス化することができないので、継承をする前提で定義します。
抽象クラスでは通常のメソッドを定義することができます。
宣言だけして、処理の内容を定義しないメソッドは抽象メソッドといいます。
抽象クラスの記述方法
抽象クラスとは、他のクラスで継承してもらうことを前提としたクラスです。
なので、抽象クラス自体をインスタンス化することはできません。
abstract 抽象クラス名{ }
抽象メソッドの記述方法
抽象メソッドとは、処理内容を持たずに名前だけ定義されたメソッドです。
継承先のクラスで必ずオーバーライドする必要があります。
abstract 抽象クラス名{ abstract アクセス修飾子 function 抽象メソッド名(); }
よって "{ }" が存在しません。
継承方法
抽象クラスを継承するときは通常どおり extends を使います。
抽象クラスで抽象メソッドを定義した場合は、派生クラスで必ず処理部を実装(オーバーライド)しなければなりません。
先の通り、抽象メソッドは処理部を備えていない不完全なメソッドだからです。
class クラス名 extends 抽象クラス名{ public function 抽象メソッド名(){ 処理内容; } }
チュートリアル
サンプルコードを書きながら理解を深めていきます。
サンプルの内容はエコーするだけのプログラムを抽象クラスから継承して実装します。
そのあと、インスタンス化してコールします。
手順
1)抽象クラスと抽象メソッドを定義
2)継承
3)実行
4)動作確認
1)抽象クラスと抽象メソッドを定義
まずは demo という抽象クラスを定義します。
続いてその中に func1 と func2 という抽象メソッドを定義します。
<?php abstract class demo{ abstract public function func1(); abstract public function func2(); } :
2)継承
: class demo2 extends demo{ public function func1(){ echo "calling func1 is success !<br>"; } public function func2(){ echo "calling func2 is success !<br>"; } }
3)実行
: $obj = new demo2; $obj->func1(); $obj->func2();
4)動作確認
http://{ホスト名}/abstract_demo.php にアクセス
結果は以下のようになります。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。