「PHP言語」の「インターフェース・名前空間・例外処理」を勉強しよう!
さまざまな機能の実装を「強制」することができる「インターフェース」や「名前空間」「例外処理」の使い方などについて学んでいきたいと思います。
「PHP言語」でも、あらかじめさまざまな「インターフェース」が用意されているとのことで、今の自分には理解が難しそうなものもありますが、エンジニア(プログラマ)さんに教えてもらいながら、勉強していきたいと思います。
教えてもらえる人がいると学習速度もかなり上がってきますね。
「インターフェース」の仕組みと作り方
「インターフェース」の場合も「抽象クラス」と同じく、メソッドの中身は書かず、メソッド名や引数名のみを書いていきます。
interface インターフェース名 { // メソッド }
今回は、「Employee(従業員)」クラスと「Work(働く)」インターフェースを作っていきたいと思います。
まず、「Employee」クラスは、
class Employee implements Work { public function work(){ print '8時間働きました'; } }
のように作り、「Work」インターフェースは、
interface Work { public function work(); }
のように作成しました。
従業員に働いてもらわないと困るため、「Work」インターフェースを作り「work(働く)」メソッドの実装を「強制」しています。
インターフェースを利用するクラスは、
class クラス名 implements インターフェース名
のように、「implements」キーワード付けるとインターフェースを利用することができます。
例えば、
$employee = new Employee(); $employee->work();
のようにプログラムを書くと、
8時間働きました
のように表示されます。
もし「Work」メソッドを実装しないままこのプログラムを実行してしまうと、
Fatal error: Class Employee contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Work::work)
のようにエラーメッセージが表示されてしまいます。
そのため、「インターフェース」を利用するクラスは、「インターフェース内のメソッドを実装することが強制される」んですね。
名前空間
「クラス」や「関数」などに「名前空間」を割り当てることができます。
「名前空間」は、
namespace 名前空間名;
のように定義することができます。
「名前空間」の異なるクラスや関数から、他の「名前空間」のクラス・関数を利用する場合は、
名前空間名\クラス名 or 関数名
のように書かないといけないとのことでした。
この機能も「大規模」なシステム開発にならないとなかなか利便性が感じられないのかも。
あと、「サブ名前空間」というのもあり、
名前空間名\サブ名前空間名\クラス名
のように書くと、「サブ名前空間」を作ることができます。
今回は、「Display」という名前空間を作り、そこに「DisplayData」というクラスを作ってみました。
namespace Display; class DisplayData { public function display($data){ print $data; } }
もう一つ「Test」という名前空間を作り、先ほど作った「DisplayData」クラスのインスタンスを作るプログラムは、
namespace Test; require_once './display_data.php'; use Display\DisplayData; $dp = new DisplayData(); $dp->display('test data');
のようになり、実行してみると、
test data
のように表示され、ちゃんと「DisplayData」クラスを利用できていることがわかりますね。
「use」の右に「名前空間名」を書くことで、「名前空間」をインポートすることができるとのことでした。
例外処理
プログラムを実行した際に「エラー」を捉えて、「エラー発生時の処理」を行うことを「例外処理」と言います。
「例外処理」は、「try~catch」を用いて書いていきます。
try { // エラーが発生する可能性がある処理 } catch( 例外クラス名 ){ // エラーが発生した時の処理 }
例外クラス
「例外クラス」は、「例外(エラー)」を表すクラスですが、自分で作ることもできて、既に用意されているものを作ることもできます。
例外の基本となるクラスが「Exception」クラスで、独自の例外クラスを作る場合もこのクラスを継承して作っていきます。
例えば、
class OriginalError extends Exception {}
のようにオリジナルの例外クラスを作っていきます。
そして、「例外」を発生させるには、「throw」を使います。
throw new 例外クラス名();
オリジナルの例外クラスを、
class OriginalError extends Exception{ function __construct($error_message){ print $error_message; } }
のように作り、
$num = 7; if( $num > 5){ throw new OriginalError('エラーが発生しました。'); }
と書いてプログラムを実行してみると、
エラーが発生しました。 Fatal error: Uncaught OriginalError in 【エラーファイル名と行数】 Stack trace: #0 {main} thrown in 【エラーファイル名と行数】
のように表示されます。