
PHPで呼び出し元の関数名(メソッド名)を取得する関数や定数はありますか?
function hoge() {
fuga(__FUNCTION__);
}
とすれば、fugaに対して、'hoge'を渡すことができると思いますが、
毎回、__FUNCTION__ と書くのは面倒です。
現在、
function fuga() {
$backtraces = debug_backtrace();
$filename = $backtraces[1]['function'];
}
として、呼び出し元を摘出していますが、他にいい方法はありますか?
No.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');
}
のようにできるのになと思いましたが、そのような関数は
ないということなので、たしかに私がやろうとしていることが、
あまり正しいことではないという気も否めません・・・。
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-back …
この回答への補足
ご回答ありがとうございます。
はい、debug_backtrace を使用しております。
ただ、デバッグしてるわけでもないのに、debugほにゃららという関数の使用と、
$func_name = $backtraces[1]['function'];
というのが、なんか間抜けだなと思い・・・。
get_caller_func()
みたいな関数があるのかなと思いましたが、なさそうですね。
debug_backtrace()で代用するのがお決まりのやり方なんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでの画像の形式の変換
-
次のhtml・cssでspan内の文字を...
-
VB.NETからVBAマクロ(引数)を呼...
-
issetで変数の存在をチェックし...
-
VB or VBScriptでPCの製造番号...
-
ps3で久しぶりにCDの音楽情報取...
-
findstrのerrorlevel
-
コンビニで住民票を取得した場...
-
DBのハッシュ化したパスワード...
-
shシェルスクリプト 空白行の...
-
URLのパラメータをGETのままで...
-
逆順表示したい?
-
PHP declare文について、ticks...
-
Google scholarがひらけなくな...
-
特定のセッション変数の内容だ...
-
DMMの動画を全件取得したのです...
-
出力されない原因を教えてくだ...
-
<A href ~で複数の値を渡したい
-
PHPで返信メールにチェックボッ...
-
switch()文で値の大小比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
どういうプログラムを関数化を...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP正規表現の難題・preg_repla...
-
PHPの名前空間インポートについて
-
関数の入れ子ができない。
-
UNIX CP "で上書きしません"
-
配列の操作時にLNK2001外部シン...
-
number_formatが勝手に四捨五入
-
次のhtml・cssでspan内の文字を...
-
外部ファイル(テキスト)を取...
-
Let's Encryptで自動更新がされ...
-
可変変数にアロー演算子を使いたい
-
vb作成したらでbeep音が鳴りま...
-
CakePHPでの自作関数保存場所
-
正規表現に関する質問です。HTM...
-
String変数の文字列の検索方法
-
クラス内で上位クラス内メンバ...
-
Fatal error: Cannot use []
-
ExcelVBAで部分一致(*)をしたい
おすすめ情報