PHPで開発していると、クラス名を直接指定したい機会があります。
例えばLaravelであれば、ルートを設定する時に(クラス名)@(関数名)
と指定します。
さて、
今回はクラス名を取得する方法についてご紹介します。
目次
get_classの落とし穴
クラス名を取得する方法として用意されているのは、get_class
です。
この関数を実行すると、クラス名を返してくれます。
しかし、ネームスペースが先頭に付与された状態で返します。
例えば次のようなクラスを用意して、get_class
を実行するとネームスペース付きのクラス名が帰ってきます。
<?php namespace Example class Helper { //... } echo get_class(new Helper()); // ネームスペース+クラス名が返ってくる // Example/Helper
用途によってはこれで正しいかもしれませんが、ネームスペースを省略したクラス名を取得したい時には使えません。
上記例で言えば、Example/Helper ではなく、Helperのみ取得したい場合はどのようにするべきでしょうか?
ネームスペースを除いた純粋なクラス名を取得する
(私が確認する限り)純粋なクラス名を返す関数はありませんので、既存の関数を組み合わせてクラス名だけ取得する処理を作成します。
先程のget_class
の難点はネームスペースを含んでしまう事でしたので、ネームスペースを空に置換して解決します。
次のような方法で実現できます。
<?php namespace Example class Helper { public static function getBaseClassName() { return str_replace(__NAMESPACE__ . '\\', '', get_class()); } } // 静的な関数ですので、インスタンスを作らずに呼び出す事が可能 echo Helper::getBaseClassName(); // Helper
これで解決できます。
この関数をそのままクラスに追加しても良いですし、もし複数のファイルで使いたい場合は継承元のクラスに追加しても良いかもしれません。