0

私はこれがあまり得意ではないので、これはばかげた質問だと確信しています。

私はクラスを持っています:

class debug {
  private static $messages = array();
  private static $errors = array();
  private static $all = array(); // includes both of above
  private static $types = array('messages','errors');
  public static function add($type, $message) {
    if(!in_array($type,self::$types) ) {
      self::add('errors','Bad type "' . $type . '" specified when sending this message: ' . $message);
      return false;
    }
    self::$$type[] = $message; // ERROR IS HERE (see below)
    self::$all[] = $message; // no error
  }

}

デバッグするために別のクラスからこれを呼び出しています (サプライズ)。

debug::add('error', 'Error in ' . __FILE__ . ' on line ' . __LINE__);

error.log からの PHP エラー メッセージ:

PHP 致命的なエラー: 行 1248 の /var/www/lib/lib.php の読み取りに [] を使用できません

これは、デバッグ クラスの上記の行を参照します。

編集:

私がやろうとしているのは、可変変数 (したがって投稿タイトル) を使用して、データを追加する静的配列を決定することです。

つまり、$type == 'messages' の場合、$$type == $messages となります。

だから私は self::$$type[] == self::$messages[] が欲しい

または、$type == 'errors' の場合、$$type == $errors および self::$$type[] == self::$errors[]

4

2 に答える 2

2

2 エラー

A.if(!in_array($type,self::$types) ) {適切に閉じられていません..最後に)insted を使用しました}

B.self::$all[] = $text; $textスクリプトのどこにも定義されていない

試す

class Debug {
    private static $errors = array ();
    private static $types = array (
            'messages',
            'errors' 
    );
    public static function add($type, $message) {
        if (! in_array ( $type, self::$types )) {
            return false;
        }
        self::$errors [$type][] = $message; // results in error (see below)
    }

    public static function get($type = null) {
        if (! in_array ( $type, self::$types ) && $type !== null) {
            return false;
        }

        return ($type === null) ? self::$errors : self::$errors [$type] ;
    }   
}

debug::add ( 'errors', 'Error in ' . __FILE__ . ' on line ' . __LINE__ );
debug::add ( 'messages', 'Error in ' . __FILE__ . ' on line ' . __LINE__ );

var_dump(debug::get());
var_dump(debug::get("messages"));
于 2012-04-25T00:22:53.277 に答える
2

次の行を に変更します。これにより、$type最初に「メッセージ」または「エラー」に評価されます。

self::${$type}[] = $message; 

これを拡張するために、これが私が持っているコードです。コードに他のエラーを引き起こしている追加の構文エラーがあるようですが、これが$$type[]そのエラーを引き起こしている理由です。

class debug {
    public static $messages = array();
    public static $errors = array();
    public static $all = array(); // includes both of above
    private static $types = array('messages','errors');
    public static function add($type, $message) {
        self::${$type}[] = $message;
        self::$all[] = $text;
    }
}

debug::add('messages', "Regular Message");
debug::add('errors', "Error Message");

print_r(debug::$messages);
print_r(debug::$errors);

そして、これは私が得る出力です

Array
(
    [0] => Regular Message
)
Array
(
    [0] => Error Message
)
于 2012-04-25T00:15:10.327 に答える