アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

現在、
function fuga() {
  $backtraces = debug_backtrace();
  $filename = $backtraces[1]['function'];
}
として、呼び出し元を摘出していますが、他にいい方法はありますか?

A 回答 (2件)

しまった・・・もとの質問にバックトレースしていると書いてありましたね


失礼しました。

>debug_backtrace()で代用するのがお決まりのやり方なんでしょうか?

そもそもどういう運用を考えているかによるのでは?
呼び出し元の関数名が必要になることはそれほど多いとは思えません。
どんな特殊なことをやろうとしているのでしょうか?

この回答への補足

> 失礼しました。

いえいえ、とんでもないです。
いつもご回答ありがとうございます。


> 呼び出し元の関数名が必要になることはそれほど多いとは思えません。
> どんな特殊なことをやろうとしているのでしょうか?

当方、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');
}

のようにできるのになと思いましたが、そのような関数は
ないということなので、たしかに私がやろうとしていることが、
あまり正しいことではないという気も否めません・・・。

補足日時:2008/05/13 21:38
    • good
    • 0

バックトレースしてみてはいかがでしょうか?



<?
function hoge() {
fuga();
}
function fuga(){
print "<pre>";
print_r(debug_backtrace());
print "</pre>";
}

hoge();
?>

参考URL:http://www.php.net/manual/ja/function.debug-back …

この回答への補足

ご回答ありがとうございます。

はい、debug_backtrace を使用しております。
ただ、デバッグしてるわけでもないのに、debugほにゃららという関数の使用と、
$func_name = $backtraces[1]['function'];
というのが、なんか間抜けだなと思い・・・。

get_caller_func()
みたいな関数があるのかなと思いましたが、なさそうですね。

debug_backtrace()で代用するのがお決まりのやり方なんでしょうか?

補足日時:2008/05/09 16:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!