2010-11-30 8 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がtrueの場合

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

その後、保護__real_debugが呼び出されます。

はところで:上記のサンプルは、PHP 5.3に限定されるものではありません。これはPHP 5.xバージョンで動作します。

+0

は、私はまた、このソリューションについて考えたが、私はいくつかのデバッグのものをしたいif文毎回の使用を回避しようとしていました。 – Madalina

+1

次に、異なる基本クラスを使用します。おそらくMyClassDebugとMyClassReleaseを持っていて、それに応じてインスタンス化しますか? (Cのように)#ifdefsはPHPで実装されていないので、私は、他のソリューションを参照してくださいません... –