• 締切済み

PHPで呼び出し元の関数名の取得方法

PHPで呼び出し元の関数名(メソッド名)を取得する関数や定数はありますか? function hoge() {   fuga(__FUNCTION__); } とすれば、fugaに対して、'hoge'を渡すことができると思いますが、 毎回、__FUNCTION__ と書くのは面倒です。 現在、 function fuga() {   $backtraces = debug_backtrace();   $filename = $backtraces[1]['function']; } として、呼び出し元を摘出していますが、他にいい方法はありますか?

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

しまった・・・もとの質問にバックトレースしていると書いてありましたね 失礼しました。 >debug_backtrace()で代用するのがお決まりのやり方なんでしょうか? そもそもどういう運用を考えているかによるのでは? 呼び出し元の関数名が必要になることはそれほど多いとは思えません。 どんな特殊なことをやろうとしているのでしょうか?

sweepea
質問者

補足

> 失礼しました。 いえいえ、とんでもないです。 いつもご回答ありがとうございます。 > 呼び出し元の関数名が必要になることはそれほど多いとは思えません。 > どんな特殊なことをやろうとしているのでしょうか? 当方、PHP暦が浅く変なことをしようとしている かもしれません。変であれば、おっしゃってください。 Webページを表示させるためのメソッド名と、 そのテンプレート名が同じなんですが、 はじめは、このようにしていました。 function index() {   処理;   $template->display('index.tpl'); } つまり、indexメソッドならindex.tplを、 finishメソッドならfinish.tplを呼び出すといった感じです。 で、毎回同じことを書くのがいやなので、このようにしました。 function index() {   処理;   $template->display(__FUNCTION__ . '.tpl'); } でも、__FUNCTION__ . '.tpl' がどうも目障りなので、 以下のようにして、見えなくしました。 function index() {   処理;   $template->displayThis(); } function displayThis() {   $backtraces = debug_backtrace();   $filename = $backtraces[1]['function'];   $this->display($filename . '.tpl'); } もし、呼び出し元の関数名を取得する関数があれば、 function displayThis() {   $this->display(caller_function_name() . '.tpl'); } のようにできるのになと思いましたが、そのような関数は ないということなので、たしかに私がやろうとしていることが、 あまり正しいことではないという気も否めません・・・。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

バックトレースしてみてはいかがでしょうか? <? function hoge() { fuga(); } function fuga(){ print "<pre>"; print_r(debug_backtrace()); print "</pre>"; } hoge(); ?>

参考URL:
http://www.php.net/manual/ja/function.debug-backtrace.php
sweepea
質問者

補足

ご回答ありがとうございます。 はい、debug_backtrace を使用しております。 ただ、デバッグしてるわけでもないのに、debugほにゃららという関数の使用と、 $func_name = $backtraces[1]['function']; というのが、なんか間抜けだなと思い・・・。 get_caller_func() みたいな関数があるのかなと思いましたが、なさそうですね。 debug_backtrace()で代用するのがお決まりのやり方なんでしょうか?

関連するQ&A