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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
classの再定義エラーについて
-
PHPの変数値をリンクさせたい
-
PHP Catchable fatal error の...
-
fwriteで改行出来ない
-
既存関数の上書き
-
PHPコードの中から、SQL文を外...
-
PHPで、相対的な変数名の場合の...
-
サブネットマスクを用いたIP制...
-
Fatal error: Cannot use []
-
VB.NETからVBAマクロ(引数)を呼...
-
関数から関数を呼び出したとき...
-
エラーの理由が分りません。Pri...
-
powershellに詳しいかた教えて...
-
配列の操作時にLNK2001外部シン...
-
関数の動きと記述方法の意味を...
-
正規表現 ファイル名の取得
-
共用体のサイズをsizeofで
-
PHP、ヒアドキュメント内でのIF...
-
PHPプログラム上で「URLを直接...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
エラーの理由が分りません。Pri...
-
可変変数にアロー演算子を使いたい
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
VB.NETSystem.Xml 要素数を得る...
-
どういうプログラムを関数化を...
-
vb作成したらでbeep音が鳴りま...
-
次のhtml・cssでspan内の文字を...
-
classの再定義エラーについて
-
既存関数の上書き
-
protectedなのにアクセスできな...
-
配列の操作時にLNK2001外部シン...
-
UNIX CP "で上書きしません"
-
PHPでの画像の形式の変換
-
PHPプログラム上で「URLを直接...
-
Let's Encryptで自動更新がされ...
-
ExcelVBAで部分一致(*)をしたい
-
VB6のコンボボックスのテキスト...
-
ASPのResponse.WriteをPHPでは...
おすすめ情報