2011-09-27 4 views
0

프로그래머 팀에서 프로그램을 만들고 있는데 특정 시스템에 대해 배열을 사용한다고 결정되었습니다. 대부분의 용도에서 배열의 모든 인덱스가 올바르게 설정되고 정의되지 않은 인덱스가 발생할 수 있습니다. isset() 또는 array_key_exists()를 사용하면 코드가 너무 느려집니다 (if 및 if가 많이 필요하므로 if가 느리고 if가 너무 빠름) too many (너무 많은 코드와 반복적 인 코드)이므로 옵션이 아닙니다. 이미 set_error_handler() 함수를 발견했지만 최선의 옵션인지 여부도 알 수 없습니다.문제의 일반적인 해결사를 만드십시오.이 프로그램에 대한 배열의 정의되지 않은 색인

주요 대상 : 특정 배열에서 정의되지 않은 색인이 발생하면이를 잡아서 해결해야하며 (상황을 로그에 기록해야 함) 스크립트는 아무 일도 일어나지 않아야합니다. 그렇게하는 가장 좋은 방법은 무엇입니까?

참고 : 다른 오류 또는 경고가 발생하면 PHP가 익숙해 진 것처럼 처리해야하므로 필자는이 이름으로 해당 배열을 만든 것만 원합니다.

난 당신이 Exception

try{ 
    if(!isset($values[23])) throw new Exception("index not defined"); 
    // do dangerous stuff here 
}catch(Exception $ex){ 
    //handle error 
} 

그러나, 이상적인 솔루션이 결코 처음부터 발생하지 있는지 확인하는 것입니다 사용해야합니다 내가 분명히 enugh에게

+0

는 –

+0

"의 속도가 느린 경우"는 isset은 응용 프로그램이 그래서, 난 당신이 다른 문제를 생각하지 못할입니다 느리게 만드는 경우가 무슨 뜻인지 나도 몰라 ... –

+0

이 경우 "의 속도가 느린 경우"당신이 무슨 뜻인지 나도 몰라 그 다음보기를 위해, 그것이 점프를 필요로하기 때문에 본질적으로 느리다. 그리고 6 - 9 대신에 200-500 ifs를 사용하면 PHP 스크립트에서 정말 눈에 @니다. @JonStirling 사용할 수 없지만 눈에 띄게 느립니다. 동시에 400-700 명의 사람들이 사용한다면 큰 문제가 될 수 있습니다. – brunoais

답변

1

이었다 바랍니다.

+0

할 수 없습니다. 예외는 PHP의 배열에서는 작동하지 않습니다. 몇 달 전에 다른 코드에서 이미 시도한 결과 작동하지 않았습니다. – brunoais

+1

예를 들어 통지를 오류보고로 설정하면 오류 –

+0

을 원한다면 예외를 던질 수 있습니다. 이렇게하면 코드가 빨라지지는 않지만 적어도 더 명확 해집니다. –

0

코드를 try-catch 문에 넣는 것을 고려하십시오. catch 내에서 오류를 기록 할 수 있습니다.

http://php.net/manual/en/language.exceptions.php

+0

나는 오류를 잡을 수 없다! 오류는 예외 만 catch 할 수 없습니다. – brunoais

+0

네 말이 맞아. try-catch가 catch 할 수있는 예외로 오류를 변환하는 방법을 살펴 보았습니까? http://snippets.dzone.com/posts/show/1617 – evasilchenko

관련 문제