1

明らかな何かが欠けている可能性があります。
set メソッドと get メソッドを持つネイティブ クラスがあります。

class DBStorage extends NativeClass{
  public function get($key);
  public function set($key,value);
}

ほとんどの場合それを使用したいのですが、システム DEBUG フラグをオンにすると。andメソッドを次のようにオーバーロードし
たいと思います。setget

IF DEBUG IS ON{
    class DBStorage extends NativeClass{
      public function get($key){
         var_dump($key);
         parent::get($key);
      }
      public function set($key,$value){
         var_dump($key,$value);
         parent::set($key,$value);
      }
    }
}

NativeClass は C で書かれています。これは拡張機能です (phpredis ですが、関係ありません)。どうすればこれを達成できますか? 私はPHPの5.3ブランチにいます。

確認するために...デバッグがオフの場合、次のDBStorageようになります。

 class DBStorage extends NativeClass{}

デバッグがオンの場合、次のようになります。

class DBStorage extends NativeClass{
      public function get($key){
         var_dump($key);
         parent::get($key);
      }
      public function set($key,$value){
         var_dump($key,$value);
         parent::set($key,$value);
      }
    }

私はIFの乱雑さを避けようとしています(実際のクラスには数十の関数があります)

public function get($key) {
       if (DEBUG) {
           var_dump($key);
       }
       return parent::get($key);
   }
4

3 に答える 3

4

条件付きでオーバーロードすることはできませんが、オーバーロードされたメソッドで条件付きで何かを行うことはできます。

class DBStorage extends NativeClass{

    public function get($key) {
       if (DEBUG) {
           var_dump($key);
       }
       return parent::get($key);
    }

}

デバッグがオフの場合、引数はそのまま親メソッドに渡され、何も起こらなかったかのように親の戻り値が返されます。

于 2013-02-06T21:18:50.733 に答える
0

クラス構造の周りの if のため、最初のコードはコンパイルされません。デバッグ メンバー変数を使用可能にし、true の場合は出力をエコーするか、ログ ファイルにプッシュしないのはなぜですか?

class NativeClass
{
    public $debug = false;
}

class DBStorage extends NativeClass
{
    public function get($key)
    {
        if (true === $this->debug) {
            error_log(sprintf('Key: %s', $key));
        }

        parent::get($key);
    }
}

// Calling code
$dbo = new DBStorage();

$dbo->debug = true;

$dbo->doStuff();
于 2013-02-06T21:20:32.913 に答える
0

何かがちょうど私に来ました

class nodebug extends NativeClass{
  static public function create(){
        if(DEBUG) return new DebugNativeClass;
        return new self;
  }
}

class DebugNativeClass extends nodebug{
    public function set($key,$value){
       var_dump($key,$value);
       parent::set($key,$value);
    }

    public function get($key){
       var_dump($key);
       return parent::set($key);
    }

}
于 2013-02-06T21:26:16.753 に答える