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ランキング
-
どういうプログラムを関数化を...
-
【Objective-c】rubyの__send__...
-
正規表現 ファイル名の取得
-
次のhtml・cssでspan内の文字を...
-
Let's Encryptで自動更新がされ...
-
VBA コレクションに2次元配列...
-
switch()文で値の大小比較
-
ミュージックのアートワークを...
-
【PHP】APIやRSSが存在しないサ...
-
perl LWPでURLにアクセスした時...
-
別サイトのHTML内にある情報を...
-
ローカルのコンピュータ名を取...
-
DTOとEntityの差は何ですか。
-
pdftkを使った処理をバッチファ...
-
bashの関数の引数にスペースが...
-
PHPでのログイン機能でのメール...
-
formの確認ページからformに戻...
-
インターネットの閲覧履歴を時...
-
GoogleやYahoo!で検索したサイ...
-
PHP、UNIXタイムでの日時計算に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Let's Encryptで自動更新がされ...
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
エラーの理由が分りません。Pri...
-
PHP、ヒアドキュメント内でのIF...
-
PHPでの画像の形式の変換
-
可変変数にアロー演算子を使いたい
-
CSVファイルをブラウザのキャッ...
-
次のhtml・cssでspan内の文字を...
-
VB.NETSystem.Xml 要素数を得る...
-
どういうプログラムを関数化を...
-
ExcelVBAで部分一致(*)をしたい
-
PHPの変数値をリンクさせたい
-
PHPプログラム上で「URLを直接...
-
protectedなのにアクセスできな...
-
ASPのResponse.WriteをPHPでは...
-
file_existsが動作しない
-
PHPでXMLの置換 replaceData
-
[C#]Arraylistに追加した構造体...
-
[C++]std:mapの扱いを教えて頂...
おすすめ情報