クラス内での自分の呼び方
自分でプログラムを作るときは、基本的にはフレームワークでの構築になるので、classを記述して、objectを生成し、そこからメンバ関数にアクセスすることがほとんどだ。だからclassの中のメンバ関数から、他のメンバ関数を呼び出すときは以下のような記述になる。
$this->hoge()
$thisはいうまでもなくオブジェクトそのものを意味する。
ところが、稀にオブジェクトを生成せずに直接class内のメンバ関数にアクセスして使うような記述をすることもある。極力内容には心がけているのだが、簡単な関数を作成したりする場合に、同じ名前空間(クラス名)の中に類似関数(メンバ関数)をとりまとめておいたりするために、やはりclassを使用する。
このとき、同じclass内の別の関数へのアクセスの記述方法がわからなかった(というかべた書きしていた)。例えば、
class hoge
{
fuga(){}
piyo(){}
}
みたいなclassがあるとして、メンバ関数piyoをhoge::piyo()みたいに呼び出して使用するわけだが、piyo関数でfuga関数を呼びたいときにどうすればよいのか、それがわからなかった。今まではクラス名をそのまま使って以下のように記述していた。
hoge::fuga()
ただこれだと、命名規則等の関係でクラス名を変更してしまったら動かなくなることは自明だ。どうやって書いておくべきなんだろう、と思ってはいたけれど、必要性にも迫られなかったので(というかその都度修正したりしていたので)放置していたが、今日やっとわかった(たまたま見つけた)。正解は、
self::fuga()
でした。いわれてみれば、「parent::fuga()みたいな書き方するよな」と思うのだが、どうやらselfは完全に見過ごしていたらしい。
ちょっと恥ずかしいが勉強になった次第。