2016-10-11 12 views
0

PHPクラス内で呼び出されたメソッドを知り、可能であれば同じクラス内で処理する必要があります。PHPクラスで呼び出されたメソッドを確認してください

class Pages 
{ 

    public function firstPage() 
    { 
     return 'First Page'; 
    } 

    public function secondPage() 
    { 
     return 'Second Page'; 
    } 

    public function thirdPage($details) 
    { 
     return view('ThirdPage')->with('details', $details); 
    } 

    //This will handle everything that happening. 
    public function handler($methodExecuted) 
    { 
     // $methodExecuted will hold what method was accessed. 
     echo 'Page ' . $methodExecuted . ' Was accessed'; 
    } 

} 

そのちょうどここにこれに似た何かが、この機能はPHPが利用可能であるならば、「ハンドラ」方法は、本物のアプリにデータをデータベースに格納するかわからないイムが、いくつかのデータをエコーし​​ます。

PHPには、これを実現する魔法の方法などがありますか?私が今までに遭遇した唯一のことは、__callメソッドですが、これはその行の上に並べ替えていますが、idが望むものとまったく同じではありません。

+1

大きな疑問は、なぜこれをやろうとしているのですか。どのメソッドが呼び出されたかを知る最終目標は何ですか?実際には、コードを書いたのはどのメソッドが呼び出されたかを既に知っているはずです。ですから、あなたが達成したいことが何であるかを少し説明して、問題の解決策だと思うだけでなく、より良い助けを得ることができるかもしれません。 – ChristianF

+0

@ChristianFどのページが返されているかを知る必要があるので、50 +メソッドを持つすべてのメソッドの中に新しいログのコードを書く代わりに、ログに動的に追加することができます。コードを何度も何度も繰り返し、ほとんどのプログラミング言語と同じように、自分自身を繰り返し始めるときには、繰り返し処理を最小限に抑えることができる何かがあります。どうやら、この特定のケースではPHPはとにかくありません。 –

+0

言語には重複を減らす方法がありません。プログラマが行います。ロギングを追加する必要がある場合は、コントローラロジックから切り離された別のサービスを使用する必要があります。確かに、どの 'Page'オブジェクトとどの' page() 'メソッドを呼び出すかを知るリゾルバがあります。このリゾルバでは、この情報をログに記録する必要があります。 –

答えて

0

いいえ、各メソッド呼び出しの前に呼び出されるPHPのマジックメソッドはありません。このメソッドを各メソッドから手動で呼び出す必要があります。

+0

私はこれを恐れていましたので、50以上のページが得られたので、ページを返す1つのメソッドごとに新しいコード行を作成することをお勧めしますか? –

+0

また、 '__call'メソッドを使うようにコードを書き直してください。あるいは、他のメソッドを呼び出す同じ場所から 'handler'メソッドを呼び出します。 @ChristianFはあなたの質問へのコメントで非常に良い質問をしました。あなたは自分自身にこの質問をするべきです。 –

関連する問題