2012-04-13 5 views
0

MVC 이유로, Codeigniter가 코어 주위에 함수를 가지고 있기 때문에 함수가 호출되었을 때 함수를 트리거 할 수 있어야합니다. 함수를 후크하고 싶습니다. setcookie가 호출 될 때 호출 할 때 함수를 트리거하는 PHP 후크 함수

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

그래서, 그것은 call_me 기능을 트리거한다 : 같은과 setcookie 예를 들어이 (트리거 함수에서)라고되어있어 파일을 만듭니다. 특정 기능이나 방법이 있습니까? 나는 debug_backtrace에 대해 안다. 그러나 그것은 내가 원하는 목적이 아니다.

+0

http://php.net/manual/en/function.rename-function.php 뭔가 다른 원래의 함수 이름을 바꿉니다 ,이 이름으로 자신의 함수를 만들고 내부의 원래 함수를 호출하십시오. 단점은 PECL에서 APD를 설치해야한다는 것입니다. – strkol

답변

1

기본적으로 살펴볼 내용은 Observers입니다.

관찰자 패턴 (일명. 부양, 게시/구독) 객체가 주체라고하는 소프트웨어 디자인 패턴은, 는 부양 가족의 목록을 유지, 관측을 불러 에게이를 통지 중 하나를 호출하여 상태 변경 사항을 자동으로 확인합니다. 주로 분산 된 이벤트 처리 시스템을 구현하는 데 사용됩니다. 옵서버는 친숙한 MVC 아키텍처 패턴의 핵심 부분이기도합니다. 실제로 옵저버 패턴은 Smalltalk의 MVC 기반 사용자 인터페이스 프레임 워크에서 먼저 구현 된 입니다.

1 왜 여기에 설명되어 무엇을하려고하지 않습니다

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

1

나는 debug_backtrace에 대해 알고 있지만 내가 원하는 목적이 아니다.

나는 백 트랙 기능을 사용하지 말 것을 주장하지만, 여전히 나는 당신이 기능을 백 트랙이라고 불러올 때 로그를 남기고 싶을 때 편리하다고 생각한다.

아이디어는 if 조건을 디버그하여이 코드를 평가할 때마다 상수에 저장된 미리 정의 된 pf 코드가 있다는 것입니다.

만약 당신이 proposal을 받고 있다면, 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 
관련 문제