2016-11-01 21 views
1

が含まれます。は、内部の現在のメソッド名を取得、私は現在、このPHPコードを持っている/必要

private function generateSpecialPage(){ 
     require_once("/view/pages/special.php"); 
    } 

Special.phpは、ほとんどがhtmlで埋め込まれたPHPファイルです。私はspecial.phpの中から現在の関数の名前を取得しようとしています。

必要とする前に、私は魔法の定数関数をエコーし​​た場合、それは私が欲しいものである、「generateSpecialPage」をエコーし​​ます。しかし、special.phpからFUNCTIONをエコーすると、何もエコーされません。現在の方法にも同様にエレガントな解決策があった場合

私はget_class($ this)を使用してspecial.php内から現在のクラスの名前を取得することができるよ、私は思っていました。

+0

より良い質問:なぜ?あなたのコードは、実行される関数に気を付ける必要はありません。もしそうであれば、意図的に将来のバグをベーキングし、再配置やページの書き換えが必要なときに、コードベースに対する将来のメンテナンスを妨げます。 –

+0

私は関数/ページの名前を変更し、私の質問とは無関係な行を削除しました。おそらくそれが混乱の原因になります。私はこのような15の他の関数を持っており、それらはすべて "special.php"をビューとして使用します。それが実行される機能が気になるのは、 "special.php"を実装するたびにページがわずかに異なり、ユーザのやりとりがわずかに異なるからです。私はわずかな変化ごとに新しいビューを作成したくありません。それは管理するのは悪夢です。むしろ、各関数またはクラス自体の変数に宣言または代入するよりも、関数名を使用したいと思います。 – Sefam

+0

これは「あなたが持っているものはすべてハンマーで、すべての問題は爪のように見える」のように聞こえる。 "special.php"を15個の異なる関数の中に含めるのではなく、それぞれの中で異なることを魔法のようにして、 "special.php" **を関数にするようにしてください。 casevalue) 'を使用することで、単一の、明らかに、簡単にログに記録し、デバッグしやすく、場所を簡単に保守することができます。 –

答えて

0

はおそらく別の関数にrequire_once("/view/pages/special.php")を変更し、関数名を渡すためにあなたのコードを再編成する必要があります。

あなたが二度目generateSpecialPage()を呼び出した場合、それは何もしません。これをrequire()に変更することで回避できますが、不要なたびにファイルをロードしています。

0

汎用コールスタックインスペクタを使用すると、呼び出し元の関数、クラスやオブジェクト、ファイル、および行をフェッチするために振り返るようになります。私は私のフレームワークの一部として使用するものは、本質的には、次のようになります。

function caller($offset = 0) { 
    return (new \Exception)->getTrace()[1+$offset]; 
} 

でこれを使用して、special.php望ましい結果が得られます:

<?php echo caller(1)['function']; ?> 

その時点でのコールスタックがあるspecial.php -> require -> doSomethingSpecialを、そうオフセットを使用して、requireをスキップし、doSomethingSpecialフレームを取得します。




ただし、にあなたのビューをリファクタリング検討するかもしれない環境の合図を取るというよりパラメータを受け取ります。汎用ビューローダーは、このようなものになるだろう:

その後、気に入って見えたテンプレートだろう
function render($template, array $params = []) { 
    extract($params); 
    require $template; 
} 

<?php echo "Hello {$caller}" ?> 

と同様に呼び出すことができます。

private function doSomethingSpecial() { 
    render('special.php', [ 'caller' => __FUNCTION__ ]); 
} 

私は実現をこれは、より望ましいタイプの入力ですが、ビューを呼び出し元から切り離すので、長期的には柔軟性が増します。

0

必要なファイルは、必要な機能と同じ有効範囲内に存在します。

だから、単にファイルを必要とする前に変数に格納することができます:

private function generateSpecialPage() { 
    $caller = __FUNCTION__; 
    require_once '/view/pages/special.php'; 
} 

その後、special.phpにあなたが$caller通常の変数を持っている:

<?= "required by {$caller}" ?> 
関連する問題