1

バックグラウンド

私が C プログラミングを行っていた頃は、コードが正常であることを確認するために想定ステートメントを使用していました。何かのようなもの:

aFunction(int hello)
{
  assume(hello < 10);

assume ステートメントの優れた点は、リリース コンパイルでは空のマクロであり、デバッグ コンパイルでは false ステートメントで die するように定義されていることです。したがって、開発者は、不必要なバグを発生させたり、パフォーマンスに影響を与えたりすることなく、仮定をチェックする assert ステートメントのすべての利点を得ました。

問題

今、私は php で作業しているので、同様のメカニズムを探しています。現在、次のような想定ステートメントがあります。

define(DEBUG, getenv('debug'));
function assume($a)
{
  if (DEBUG && !$a)
  {
    echo 'ASSUME FAILURE <br />';
    echo '<pre>';
    print_r(debug_backtrace());
    die('<pre>');
  }
}
assume($a == $b);

ご覧のとおり、サーバー設定でデバッグ フラグを設定して、実際の die ステートメントなどを削除しました。ただし、関数呼び出しは引き続き実行され、if ステートメントは引き続き評価されます。これは、数千回しか発生しない場合は大したことではありませんが、コードが大きくなり、これらがループに入れられると仮定すると、パフォーマンスに正当な影響を与える可能性があります.

質問

これらの想定ステートメントを完全に無視するようにインタープリターまたは opcache (私は現在、php 5.5 に含まれる zend opcache を使用しています) に指示する方法はありますか? または、この問題を処理する別の方法はありますか?

4

1 に答える 1