2013-02-09 3 views
0

Я пытаюсь проходными различными вариантами из расширенных классов в моем родительском классе, но я получаю эту ошибку с моим Еогеаспом заявлением:Перебор расширенных методов: Недействительный аргумент для Еогеаспа()

Внимания : Недопустимый аргумент для 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

+0

Попробуйте переменную var_dump(), чтобы увидеть, рассматривается ли она как массив. – fedorqui

+0

Эй @ Dukeling, это PHP. –

ответ

0

Предупреждение: Invalid аргумент поставляется для Еогеаспа()

говорят вам, что foreach ожидает массив, который будет предоставляться в качестве первого аргумента. Вы предоставляете ему $options = $this->options(), а так как метод options() пуст, его возвращаемое значение равно NULL поэтому установка $options = NULL.

Чтобы избежать этого вы можете:

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

Это избавляет от ошибки, но мне нужно, чтобы 'foreach' перебирал каждый случай' $ this-> options() 'из расширенных классов, и он по-прежнему не делает этого по какой-либо причине, я могу Нет. :/ –

+0

@AlexMangini Ваши '$ this-> options()' ничего не возвращают. Вы определили 'options' как пустой метод (' public function options() {} '). – Shoe

+0

Да, я определил его, чтобы расширенные классы могли перезаписать этот пустой метод. В противном случае я получаю ошибку, что $ this-> options() - неопределенный метод. –

Смежные вопросы