2013-02-09 29 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