PHP 使用变量变量将数据插入静态变量时出错


PHP Error when using variable variable to insert data into static variable

我不是很擅长这个,所以我确定这是一个愚蠢的问题。

我有一堂课:

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__);

来自错误.log的 PHP 错误消息:

PHP 致命错误:无法使用 [] 读取第 1248 行的/var/www/lib/lib.php

它引用调试类中上述指定的行。

编辑:

我正在尝试做的是使用变量变量(因此发布标题)来确定要向哪个静态数组添加数据。

即,如果$type == "消息",则 $$type == $messages。

所以我想要 self::$$type[] == self::$messages[]

或者,如果$type == '错误',则

$$type == $errors 和 self::$$type[] == self::$errors[]

将以下行更改为。这可确保首先将$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
)

2 错误

一个。 if(!in_array($type,self::$types) ) {没有正确关闭..最后你用了)而不是}

二. 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"));