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

+0

var_dump() 변수가 배열로 간주되는지 확인하십시오. – fedorqui

+0

안녕하세요, @Dukeling, 이것은 PHP입니다. –

답변

0

경고 : 잘못된 foreach()에 제공된 인수

foreach에 배열이 제공 될 것으로 기대한다고 알려줍니다. $options = $this->options()에 입력하면 options() 메서드가 비어 있으므로 반환 값은 NULL이므로 $options = NULL으로 설정됩니다.

을 방지 할 수있는 수 :

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

그건 오류를 없애 버렸지 만 확장 클래스에서'$ this-> options()'의 각 경우를 반복하는 'foreach'가 필요하다. 그리고 나는 아직도 할 수있는 이유 때문에 그렇게하지 않는다. 알아 내지 못해. :/ –

+0

@AlexMangini'$ this-> options()'는 아무 것도 반환하지 않습니다. 'options'를 빈 메소드 ('public function options() {}')로 정의했습니다. – Shoe

+0

예, 확장 클래스가이 빈 메소드를 덮어 쓸 수 있도록 정의했습니다. 그렇지 않으면 $ this-> options()가 정의되지 않은 메서드라는 오류가 발생합니다. –

관련 문제