こんぶにのブログ

エンジニアという職業を通して学んだことを発信するブログです。

phpの抽象クラス、インターフェース、namespaceについてざっと復習

抽象クラス

abstract classで定義するやつ。
基本はclassで、継承元になる。
abstractで定義されたメソッドは、継承先では絶対に実装しなければならない。
abstractが付いていないメソッドなら、実装しなくてもオッケー。
このメソッドは絶対実装したいよね~っていうのがあって、継承を使いたいとき。

インターフェース

抽象メソッド(名前だけ定義されてて、中身がないやつ)が書かれているファイル。
クラスではない。
ただ、使う時はクラスの継承みたいにする。
継承の時はextendsだったところをimplementsとする。
継承ではなく、実装と呼ぶ。
中身のないメソッドの名前だけを引き継いで、中身を作っていくから、実装なのだろう。
継承ってほど元クラスの動きを使いたいわけではないが、決まったメソッドを必ず実装したい時に使う。
なお、継承も実装も、行った場合は親クラスの型になる模様。

namespace

classをぶち込むフォルダみたいなのを勝手にphpが頭の中で作ってくれる。
例えば、class dog { }みたいなのが定義されたphpファイルがあったとする。
このdogクラスをnamespaceで定義した場所に保存してくれる。
何が良いかというと、同じクラス名のものがあったときにnamespaceフォルダを分けて保存すれば、同じ名前のまま呼び出したいほうを呼び出せる。
使い方としてはnamespace doubutsu\inuとclass dogを定義したファイルに書いておく。
で、dogをインスタンス化したいファイル内で、use doubutsu\inuと書いてみる
で、インスタンス化するときにいつも通りnew dog()とすればいい。
このときのdogはdoubutsu\inuにあるdogのことね、とphpが解釈してくれる。
だから、use doubutsuとだけしても行ける。
new \inu\dog()と、相対パス的に書けばよい。