2

私はプログラミングにまったく慣れていません。プログラムを開発するときは、簡単な戦略を使用してデバッグします。たとえば、重要なステートメントを操作するときに、デバッグメッセージに沿って出力するプログラムを作成します。

function foo1($number)
{
  //foo_print("I am function foo1({$number}). <br/>");
  //foo_print("I am going to increase 'count' by {$number}. <br/>");

  $GLOBALS["count"] = $GLOBALS["count'] + $number;

  //foo_print("Now 'count' = {$GLOBALS["count"]}, I finished my task, BYE BYE. <br/>");

}

function isFoo($number)
{
  //foo_print("I am function isFoo({$number}). <br/>");
  //foo_print("I am checking if the number < 3 or not, if so, it is Foo, if not, it is not Foo. <br/>");
  if($number <= 3)
  {
    //foo_print("Found that number = {$number} <= 3, I return true, BYE BYE. <br/>");
    return true;
  }

  //foo_print("Found that number = {$number} > 3, I return false, BYE BYE. <br/>");
  return false;
}

私はそれらをデバッグメッセージと呼んでいますが、ご覧のとおり、実際には、プログラムが各行で何をするかを説明する完全なコメントです。プログラムをデバッグしているときに、関数foo_print()を記述してそれらを出力します。そして、実際の使用でそれらをコメントアウトします。

実際の実行モードとデバッグモードを切り替えるときに、コメント記号'//'を1行ずつ挿入および削除する代わりに、関数foo_printを使用して作業を行います。これは、オンまたはオフに設定できます。

define(FOO_PRINT, 1)
function foo_print($message)
{
  if(FOO_PRINT) print $message;
  // if FOO_PRINT == 0 then do nothing.
}

しかし、この方法は効果がないと思います。メッセージを印刷する前に、毎回FOO_PRINTをチェックする必要があります。

私の質問は次のいずれかまたは両方です

  • 使用したくないときにfoo_print()関数を無視するようにphpに指示することはできますか?

  • おそらく、foo_print関数を使用する代わりに、「//」記号を使用してプレーンコメントスタイルでメッセージを記述し、デバッグモードでそれらのコメントメッセージを出力するようにphpインタープリターに指示する必要があります。それをしてもいいですか?

デバッグのしやすさ以外に、この方法は、後で見に戻ったときにプログラムを理解するのに役立つという利点があると思います。(私にとっては非常に長く複雑で、すぐに忘れてしまうと思います。)

プログラムを開発するために高度なIDEとデバッグツールを使用することは、今では非常に複雑であることがわかりました。これらの高度なデバッグツールのいくつかは、私が望むものと同様のことを実行できると思いますが、PHP-eclipseとxdebugを1週間試しましたが、どこにも行きませんでした。どうもありがとうございます。

4

2 に答える 2

3

2つの関数を定義できます。1つはデバッグデータを出力し、もう1つは出力しません。次に、変数名を使用して呼び出したい関数の名前を含め、変数内の関数を呼び出してデバッグを実行します。このような:

function debug_print($data) {
    echo $data;
}
function debug_none($data) {
}

$debug = 'debug_print';
$debug('Testing one'); // This prints out 'Testing one'

$debug = 'debug_none';
$debug('Testing two'); // This doesn't print out anything

これを行う場合は、global $debugその関数を使用したい関数を追加することを忘れないでください。

編集:同じ結果を達成するためのよりオブジェクト指向の方法もあります。インターフェイスを定義し、その実装をいくつか記述して、実行時に使用する実装を選択できるようにすることができます。

$debugmode = true;

interface Debugger {
    public function out($data);
}

class EchoDebugger implements Debugger {
    public function out($data) {
        echo $data;
    }
}

class NullDebugger implements Debugger {
    public function out($data) {
        // Do nothing
    }
}

if($debugmode)
    $debugger = new EchoDebugger();
else
    $debugger = new NullDebugger();

$debugger->out('This will be output if $debugmode is true');
于 2012-05-01T12:27:01.817 に答える
-1

つぼみなし、

そのようなことは不可能であり、毎回条件を定義する必要があります。

これはphpのコードでは実行できません

于 2012-05-01T12:15:50.713 に答える