【问题标题】:Looping through extended methods: Invalid argument supplied for foreach()循环遍历扩展方法:为 foreach() 提供的参数无效
【发布时间】:2013-01-25 06:52:23
【问题描述】:

我正在尝试遍历父类中扩展类的不同选项,但我的 foreach 语句不断出现此错误:

警告:为 foreach() 提供的参数无效

不知道为什么会这样,知道我错过了什么吗?不知道为什么$this->options() 不被识别为一个数组......我以前也做过类似的事情,但我认为这里有一些东西正在我的脑海中闪现:

class parent_class {
    public function my_method() {
        $options = $this->options();
        foreach($options as $option) {
            // ...
        }
    }

    public function options() {
    }
}

class child_one extends parent_class {
    public function options() {
        $options['name_one'] = array(
            'type' => 'type_one',
            'id' => 'id_one',
            'name' => 'name_one'
        );
        return $options;
    }
}

class child_two extends parent_class {
    public function options() {
        $options['name_two'] = array(
            'type' => 'type_two',
            'id' => 'id_two',
            'name' => 'name_two'
        );
        return $options;
    }
}

【问题讨论】:

  • 尝试 var_dump() 变量,看看它是否被认为是一个数组。
  • 嘿@Dukeling,这是 PHP。
  • @fedorqui,它们确实以数组的形式出现,但它们都是独立的。我在想我可能需要将所有不同的 $options 实例合并到一个数组中?

标签: php class methods foreach extends


【解决方案1】:

警告:为 foreach() 提供的参数无效

告诉你foreach 期望提供一个数组作为第一个参数。 你提供给它$options = $this->options() 并且由于options() 方法是空的,它的返回值是NULL 因此设置$options = NULL

为了避免它,你可以:

$options = $this->options();
if (is_array($options))
    foreach($options as $option) {
        // ...
    }
}

【讨论】:

  • 这确实消除了错误,但我确实需要 foreach 循环遍历扩展类中 $this->options() 的每个案例,但它仍然没有这样做,原因是我想不通。 ://
  • @AlexMangini 您的$this->options() 没有返回任何内容。您已将 options 定义为空方法 (public function options() {})。
  • 是的,我定义了它,以便扩展类可以覆盖那个空方法。否则,我会得到 $this->options() 是未定义方法的错误。
  • @AlexMangini,你能提供你得到错误的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 2011-02-07
相关资源
最近更新 更多