2012-04-13 5 views
0

MVCの理由から、Codeigniterはコアの周りに関数を持っているので、関数が呼び出されたときに関数を呼び出せるようにしたいこのようsetcookieと、それは、例えば(トリガーされた関数から)と呼ばれていたときに、ファイルを作成するなど:呼び出されたときに関数をトリガーするPHPの既存関数をフックする

function call_me() 
{ 
    $file = fopen('setcookie.txt', 'a+'); 
    fwrite($file, 'Called at ' . __CLASS__); 
    fclose(); 
} 

setcookieが呼び出されたときに、それはcall_me機能を起動する必要があります。特定の機能や方法がありますか?私はdebug_backtraceについて知っているが、それは私が望む目的ではない。

+0

http://php.net/manual/en/function.rename-function.php 何か他のものに元の関数の名前を変更この名前で独自の関数を作成し、内部で元の関数を呼び出します。欠点は、PECLからAPDをインストールする必要があることです。 – strkol

答えて

1

基本的に見る必要があるのはObserversです。

オブザーバーパターン(別名。扶養、パブリッシュ/サブスクライブ)は、オブジェクトが、対象と呼ばれる、 がオブザーバーと呼ばれ、その扶養家族のリストを保持し、 それらを通知する デザインパターンです のいずれかのメソッドを呼び出すことによって、自動的に状態の変更が行われます。これは主に、分散型イベント の処理システムを実装するために使用されます。 Observerは、おなじみのMVC アーキテクチャパターンの重要な部分です。事実、オブザーバパターンはSmalltalkのMVCベースのユーザインタフェースフレームワークで最初に実装された でした。 1あなたがここで説明されているものしようとしないのはなぜ

http://devzone.zend.com/1384/observer-pattern-in-php/

1

私がdebug_backtraceについて知っているが、それは私が欲しいの目的ではありません。

私はあなたがバックトラック機能を使用しないことを主張しているのを見ますが、それでも私はあなたがバックトラックと呼ばれる機能を呼び出すときにログしたいと思うと便利だと思います。

考えられるのは、if条件をデバッグしてこのコードを評価するたびに、定数に格納されている事前定義ピースのpfコードがあるということです。

もしあなたがprouctionの下にあるならば、if文はあなたのコードのスピードに影響を与えないように評価することを防ぎます。それがあなたのために働くならば、それをあなたのニーズに合わせて変更し、より多くのレベルを追跡することができます。

これは完全な例です。私が正しく理解していない場合、これがあなたが探しているものではない場合、私の謝罪です!これは、test1.php

<?PHP 

class test1 
{ 
    public static function a() 
    { 
     test2::b(); 
    } 
} 

?> 

最後にあるtest2のあるtest.phpを

<?php 

define ('__SITE_PATH',realpath(dirname(__FILE__)).'/'); 
ini_set('log_errors', 1); 
ini_set('error_log', __SITE_PATH.'my_error_log.log'); 
include 'test1.php'; 
include 'test2.php'; 


define (__DEBUG_EVAL, ' 
    $dbt = debug_backtrace(); 
    error_log(
    "\n". 
    "Parent function file: "   . $dbt[1]["file"]  . "\n" . 
    "Parent function class: "  . $dbt[2]["class"]  . "\n" .   
    "Parent fiunction name: "  . $dbt[2]["function"] . "\n" .  
    "Par. fiunc. called from line: " . $dbt[2]["line"]  . "\n" . 

    "Child function file: "   . $dbt[0]["file"]  . "\n" . 
    "Child function class: "   . $dbt[1]["class"] . "\n" .   
    "Child fiunction name: "   . $dbt[1]["function"] . "\n" .  
    "Child fiunc. called from line: " . $dbt[1]["line"]  . "\n" . 
    "\n" 
    ); 
    '); 


test1::a(); 

    ?> 

は、あなたがファイルを持っている例を確認するには。

<?PHP 



class test2 
{ 
    public static function b() 
    { 
     if(defined('__DEBUG_EVAL')) eval(__DEBUG_EVAL); 
     echo 'Hello!'; 
    } 
} 

?> 

このPHP結果です:

[13-Apr-2012 14:37:18] 
Parent function file: C:\PHP-GTK\MyProjects\Electre\test1.php 
Parent function class: test1 
Parent fiunction name: a 
Par. fiunc. called from line: 29 
Child function file: C:\PHP-GTK\MyProjects\Electre\test2.php 
Child function class: test2 
Child fiunction name: b 
Child fiunc. called from line: 7 
関連する問題