はじめに
N88BASICを中学校のときに触りまくってしまったせいで、2X歳になった今年でも未だにすべてを手続き型で書いてしまう私が、
とうとうオブジェクト指向の勉強をはじめました。
その中で、「インターフェイス」というわけのわからないものに出会ったので、備忘録がてら書いてみたいと思います。
間違っていたらご指摘ください。
そもそもインターフェイスとはなんぞや?
「インターフェース」か「インターフェイス」かわかりませんが、私はインターフェース派です。
しかし、教わった方がインターフェイスとおっしゃってたので、そっちが正しいのかな?と思っていたり。
で、何するやつかということを、すっっっっっっっごく噛み砕いて言うと、
定義したメソッドを使うことができるよ!
ってことだそうです。
……は?
そんな反応になりますよね。僕もそうです。
ようは、先にメソッド名を宣言しておいて、その中身をclassの中で定義していく……という風に使うんですって。
なんじゃそりゃ。
とりあえず、詳しい解説みたい人はPHPのリファレンスへ。。。
とりあえずやってみる
まあ、兎にも角にも、コードを書いてみなければわかりません。
処理の内容としては、
- Hdmiというインターフェースにconnect(接続する)というメソッドを宣言しておきます。
- Displayというクラスで、Hdmiインタフェースをimplements(実装)します。
- connectメソッドの中身をDisplayクラスの中で定義します。
- 実際にDisplayオブジェクトを作成し、connectメソッドを実行してみます。
<?php
# インタフェースの定義
interface Hdmi{
# connectメソッドの宣言
public function connect();
}
# Displayクラスの定義
class Display implements Hdmi{
# connectメソッドの定義
public function connect(){
echo '接続しました';
}
}
# なんとなくHdmi型のオブジェクトを渡す関数で実行してみる
function hdmiConnect(Hdmi $obj){
$obj->connect();
}
# 実際にインスタンスを作って実行してみる
$display = new Display();
hdmiConnect($display);
↓ 実行結果
接続しました
こんな感じですね。
……あんまり意味がない……と思えがちですが、
例えば
キメラclass
と言うものを創るときに、獅子class
、山羊class
、毒蛇class
のそれぞれのメソッドを継承したい。
そしてそれぞれのメソッドの中身が、元の各動物のクラスと、キメラのクラスでは違ってくる……
そんなときに使える!…………そうです(
プレイヤーには再生ボタン(Playableインターフェース)が付いてる。
再生ボタンを押すと、CDプレイヤーは音が鳴り、DVDプレイヤーは音と映像が流れる。
DVDレコーダーはRecordableインターフェースとPlayableインターフェースの両方をそなえている。
クラスは本体(機種)、インターフェースは側面(役割、操作部、接続部)。
DVDプレイヤーのインターフェースは前面と背面に付いてるけど。
本体内部は、小さな機能を持った部品を組み合わせて様々な機能が実装されてるけど、ユーザが使えるのはインターフェスのみ。
その小さな部品にも様々な回路が内蔵されてるけど、外から使えるのは側面や下面にある端子(インターフェース)のみ。
@shiracamus さんがわかりやすい解説をコメントしてくださりましたので、引用させていただきます!
ありがとうございます!!
私もまだ勉強途中なので、「へ〜、こんなのがあるんだ」くらいの認識ですが、同じ困っている仲間がいそうだったので書いてみました。
また知識が増えたら共有していきたいと思います。