1

私が書いているPHPプログラムは、約200行のコードです。私が書いた多くの関数があり、おそらくダースほどです。プログラムにデバッグ オプションを設定したいのですが、その値をすべての関数内でもアクセスできるようにしたいと考えています。これはどこでどのように定義する必要がありますか?

Global $debug_status;

function blah ($message) {
if ($debug_status == "1" ) {
  do something...}
...
}

これは正しいアプローチですか?ありがとう!

4

3 に答える 3

3

定数を使用します。

define('DEBUG', true);

...

if (DEBUG) ...

もちろん、デバッグするためのより良い方法があります。たとえば、OOP を使用して、ロガー インスタンスを各オブジェクトに挿入し、

$this->logger->debug(...);

メッセージをログに記録するには、ロガーの出力フィルターを切り替えて、デバッグ メッセージを表示または非表示にします。

于 2013-06-04T06:27:33.633 に答える
1

変数は、一種のパ​​ターンである Registry クラスで定義する必要があります。

ワーキングデモ

レジストリの例

class Registry {
   private static $registry = array();

   private function __construct() {} //the object can be created only within a class.
   public static function set($key, $value) { // method to set variables/objects to registry
      self::$registry[$key] = $value;
   }

   public static function get($key) { //method to get variable if it exists from registry
      return isset(self::$registry[$key]) ? self::$registry[$key] : null;
   }
}

使用法

オブジェクトを登録するには、このクラスを含める必要があります

$registry::set('debug_status', $debug_status); //this line sets object in **registry**

オブジェクトを取得するには、getメソッドを使用できます

$debug_status = $registry::get('debug_status'); //this line gets the object from **registry**

これは、すべてのオブジェクト/変数を格納できるソリューションです。あなたが書いたような目的のために、単純な定数とdefine().

私のソリューションは、アプリケーションのどこからでもアクセスする必要があるあらゆる種類のオブジェクトに適しています。

編集

@decezeが提案したように、シングルトンとmake get、setメソッドを静的に削除しました。

于 2013-06-04T06:26:14.707 に答える