抽象クラス
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()
と、相対パス的に書けばよい。