如何正确定义PHP类中的数组以防止未定义的索引错误?

时间:2015-02-25 21:41:29

标签: php arrays

我正在尝试使用一点PHP,并且我正在尝试理解为什么我会在以下情况下遇到undefined index错误:

class foo {
  public static some_dict;

  public function fillSomeDict() {
    self::some_dict = array(1=>"foo",2=>"baz",4=>"cous");
  }

  public function dump() {
     $err = error_get_last();
     $type = $err["type"];

     echo self::some_dict[$type];

  }

  public function setup() {
    register_shutdown_function(array($this, "dump"));
  }
}

$x = new foo();
$x->fillSomeDict();

我的问题是,我总是在这一行some_dict[$type]上收到'未定义的索引'错误。我已经尝试通过父调用(例如这里)在__construct上填充数组,但它仍然无效...

问题: 如何在PHP中正确引用此数组的元素?我该如何正确设置?

谢谢!

2 个答案:

答案 0 :(得分:1)

在作为数组访问它之前,你应该检查$ err是否是一个数组。

并检查你是否在self :: $ some_dict中有一个元素,索引为$ err ['type'](我在'echo'中这样做)

    public function dump() {
        $err = error_get_last();
        if(!is_array($err)) {
            echo 'No errors!';
            return;
        }

        echo isset(self::$some_dict[$err["type"]]) ? self::$some_dict[$err["type"]] : 'No error with index "'.$err["type"].'"';
  }

答案 1 :(得分:1)

初始化变量时需要定义数组。

所以改变

 public static $some_dict;

public static $some_dict = array(1=>"foo",2=>"baz",4=>"cous");

当您致电时,您需要使用$并使用isset

if(isset(self::$some_dict[$err["type"]])){ echo self::$some_dict[$err["type"]]; }