2009-03-21 4 views
0

나는 오류가있어 나는 거의 모든 통찰력으로 생각할 수있는 모든 것을 봤어. 어쩌면 당신은 신선한 눈으로 도울 수 있습니다.서버 로그에 오류가 나타납니다 ... 어떻게 중지합니까?

개체 배열을 반환하는 함수가 있습니다. 이 함수를 호출하는 코드는이 배열을 반복하며 각 객체와 관련된 작업을 수행합니다. 시각적으로 HTML을 출력 할 때 시각적으로 작동하는 것으로 보이지만 서버 로그에 "foreach()에 잘못된 인수가 제공되었습니다."라는 오류가 계속 표시됩니다. 예, 기술적으로는 훌륭하지만,이 오류가 더 이상 나타나지 않기를 바랍니다. 생각?

<?php 

// The class whose method returns an array of library_Label objects 
class library_Label 
{ 
    public $id = null; 
    public $name = null; 

    public function getChildren() 
    { 
    // $children is declared earlier 
    return $children; 
    } 
} 


// main code 
$columns = new library_Label(1); 
foreach ($columns->getChildren() as $label) echo $label->Name; 

?> 
+0

몇 가지 코드를 보여 주실 수 있습니까? 특히, 당신이 돌아 오는 것과 foreach가 어떻게 생겼는지. – strager

+0

코드 없음 ... 언어조차! – vladr

+0

PHP입니다. 미안하지만 그건 중요한 정보 같아 보이지 않니? – Iwasakabukiman

답변

1

이 상당히 일반적입니다, 내 솔루션은이 변경 항상 :

foreach ($columns->getChildren() as $label) echo $label->Name; 

$children = $columns->getChildren(); 
if (is_array($children)) foreach ($children as $label) echo $label->Name; 

에 그것은 모든 상황을 포함해야한다.

중괄호를 사용하여 완전한 if 문으로 확장 한 다음 else 블록을 포함시켜 원하는 경우 자녀가 비었을 때 상황을 처리 할 수 ​​있습니다.

1

사용중인 언어를 말하지 않지만 PHP 오류처럼 보입니다. 그렇다면 PHP의 error reporting levels을 확인하십시오. 하지만 실제로 php.ini의 값을 변경해야 서버 로그에 다른 오류가 덤프되지 않습니다.

물론, 당신은 왜 그 오류가 던져지고 있는지 알아 내야 할 것입니다.

1

배열이 아닌 변수에 foreach을 수행하려고하면 경고 "Invalid argument supplied for foreach()"이 발생합니다.

getChildren()에서 반환 값이 실제로 인지 확인하려면 배열로인지 확인해야합니다.

생성자 소스 나 실제로 $children을 생성하는 코드를 제공하지 않았으므로 컨텍스트에서 알 수 없습니다. 그게 곧 나오면, 당신을 도울 수 있습니다.

foreach을 실행하기 전에 반환 값을 인쇄하는 것이 좋습니다 ("print_r($columns->getChildren())"). 배열인지 여부를 명확하게 표시해야합니다.

empty() 또는 count()을 사용하여 배열이 비어 있는지 확인하는 것이 좋습니다. 넷 상태의 일부 사이트에서도 빈 경고가 발생하지만 테스트 할 수있는 PHP 환경이 없습니다. 그.

관련 문제