2012-06-15 2 views
2

펑키 제목에 대해 유감스럽게 생각하며 문제가 생겼습니다. 첫째, 나는 (코드 분리 후) 실제로 문제를 해결할 수 있었지만, 내 솔루션이 효과가 있었는지, 그리고이를 학습 경험으로 간주하려고하는지 잘 모른다.PHP 배열 인덱스 문제 발생

DB에서 정보를 수집하는 클래스가 있습니다. 이 클래스는 호출 함수가 한 번에 하나씩 결과를 가져올 수 있도록 인덱스 값을 추적합니다. 그래서 내 클래스 코드 원래 포함 ...

protected $index = NULL; 
protected $array = array(stuff); 

public function next_item() 
{ 
    if($this->index == NULL) 
    {//first time called 
     $this->index = 0; 
    } 
    else 
    { 
     $this->index++; 
    } 

    if($this->index < sizeof($this->array)) 
    { 
      return TRUE; 
    } 
     return FALSE; 
} 

public function get_result() 
{ 
     return $this->array[$this->index]; 
    } 

그리고 호출하는 함수는

while($myclass->next_item()){ 
     echo $myclass->get_result(); 
} 

그것은 (모든 많은 참여 물론 이것보다하지만이 방법으로 문제가 코드와 유사한 무언가가 당신은 아이디어를 얻는다). 이 코드는 프로젝트에서 무한 루프 (또는 하나의 모양)를 유발했습니다. $ index를 -1로 초기화하고 null에 대한 조건부 검사를 제거하여 문제점을 수정했습니다. 그래서 지금은 ...

protected $index = -1; 

public function next_item() 
{ 
    $this->index++; 

    if($this->index < sizeof($this->array)) 
    { 
      return TRUE; 
    } 
    return FALSE; 
} 

내 질문은, 그게 뭐야? 배열이 NULL 인 동안 인덱스가 참조되지 않았습니다. 항상 NULL이 호출되었고 0에 대입 된 조건부 검사가 발생했습니다.

정말 감사드립니다. 이것을 학습 경험으로 바꾸려고 노력했습니다. 왜 그것이 효과가 있었는지 이해한다면 더 좋습니다.

이 질문에 대한 답변이 있으면 죄송합니다. 본인의 질문에 레이블을 붙이는 방법을 알 수 없으므로 이전 답을 찾지 못했습니다.

환호, 데이비드

+0

실제로'if (++ $ this-> index array))'를 사용하여 줄을 저장하면 그 값이 증가합니다. – DanRedux

답변

3

귀하의 문제는 사실에 기인했다 PHP에서 0 == NULL 그. 따라서 색인을 0으로 설정하면 next_item으로 전화 할 때마다 계속해서 0으로 설정하면 계속 this->index == NULL이됩니다.

테스트를 this->index === NULL으로 변경하면 문제가 해결되었을 수도 있습니다. PHP의 =====의 차이점을 다루는 this question을 참조하십시오.

+0

이 펀치에 맞았다. [이 스레드 대 NULL 대 거짓 대 0] 참조 (http://stackoverflow.com/questions/137487/null-vs-false-vs-0) – cpilko

+0

대단히 감사합니다. 매우 도움이되었습니다. 시간 내 주셔서 감사합니다. – dgeare

+0

@dgeare 문제 없음 :) – Paulpro