2013-02-09 104 views
0

我试图通过从扩展类在我父类不同的选择循环,但我不断收到此错误与我的foreach语句:循环通过扩展的方法:对的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; 
    } 
} 
+0

哪种语言? – Dukeling 2013-02-09 19:42:34

+0

尝试var_dump()变量以查看它是否被视为数组。 – fedorqui 2013-02-09 21:03:06

+0

嘿@Dukeling,这是PHP。 – 2013-02-09 23:11:06

回答

0

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

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

为了避免它,你可以:

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

这确实消除了错误,但我确实需要'foreach'来从扩展类中遍历每个'$ this-> options()'的情况,但它仍然不会这样做,因为我可以不知道。 :/ – 2013-02-10 00:25:37

+0

@AlexMangini你的'$ this-> options()'没有返回任何东西。你已经将'options'定义为一个空方法('public function options(){}')。 – Shoe 2013-02-10 01:40:47

+0

是的,我定义了它,所以扩展类可以覆盖该空方法。否则,我会得到错误,$ this-> options()是一个未定义的方法。 – 2013-02-10 01:51:25

相关问题