2010-11-30 2 views
0

PHP에서 PHP 해석기로 일부 메소드를 무시할 수 있습니까? 예를 들어, 프로젝트가 릴리스 모드 인 경우 일부 메소드 나 함수를 무시하고 프로젝트가 디버그 모드에있는 경우이를 실행해야합니다.PHP 해석기로 메소드를 무시하십시오.

답변

0

당신이 실제로 한 후 용액 Overloading를 사용하는 방법 (하지 기능)에 대해 이야기하는 경우 :

class MyClass 
{ 
    static public $debugging = true; 

    public function __call($function, $arguments) 
    { 
    if (!self::$debugging) 
     trigger_error("Cannot call $function in release mode!", E_USER_ERROR); 
    return call_user_func_array(array($this,'__real_'.$function), $arguments); 
    } 

    protected function __real_debug($a,$b,$c) 
    { 
    // Do something here 
    } 
} 

그런 다음 MyClass의 전부가 아니다 암시 적으로 선언 된 메소드, 오버로드 __call 메소드가 호출됩니다. 당신이 할 경우 $debugging에 해당하는 경우

$c = new MyClass(); 
$c->debug(1,2,3); 

그런 다음, 보호 __real_debug가 호출됩니다.

BTW : 위의 샘플은 PHP 5.3에 국한되지 않습니다. PHP 5.x 버전에서 작동합니다.

+0

이 솔루션에 대해서도 생각했지만 디버깅 작업을 할 때마다 if 문을 사용하지 않으려 고했습니다. – Madalina

+1

그런 다음 다른 기본 클래스를 사용하십시오. 어쩌면 MyClassDebug 및 MyClassRelease가 있고 이에 따라 인스턴스화 할 수 있습니까? #ifdefs (C와 유사)가 PHP에서 구현되지 않았으므로 다른 해결책은 없습니다 ... –

관련 문제