2012-07-26 3 views
0

나는 다음과 같은 PHP 코드가 다른 함수 내에서 선언 된 함수로 사망 두 번째로 :스크립트

function map_FilteredWithOriginal($n, $m) 
    { 
     return(array(($n + 1) => ($m + 1))); 
    } 

스크립트가 중지됩니다.

나는 때문에 당신이 map_FilteredWithOriginal를 다시 선언 할 것 mapWordsToOriginal에 두 번째 통화에 .... 그리고 예외가 사로 잡았되고 있지 이유를 알고 당신은 아마 오류를 얻고있다

+4

호기심에서 벗어나서 왜 메소드 내에서 메소드를 선언하고 있습니까? – Matt

+1

오류보고를 켭니다. 모든 것이 PHP에서 예외를 throw하지는 않습니다! (사실 대부분의 문제는 그렇지 않습니다) 대신 치명적인 오류를 찾으십시오. –

+0

[도움이 될 수 있습니다] (http://stackoverflow.com/questions/708341/can-i-include-a-function-inside-of-another-function-php). –

답변

2

두 번째 단계에서 다시 선언되지 않도록 함수 선언 주위에 function_exists() === false 조건부를 추가해야합니다. 가치있는 일이라면 함수를 조건 적으로 선언하려는 의도가 아니라면 (예 : 조건부로 함수를 작성하는 함수를 사용하는 경우) 일반적으로 중첩 된 방식으로 함수를 선언하지 않아야합니다.

이 경우 기본 함수 외부에서 중첩 함수를 이동해야합니다.

+0

외부로 옮길 경우이 코드가 어떻게 인식할까요? array_push ($ d, array_map ("map_FilteredWithOriginal", array_keys ($ this-> wordsArray, $ word), array_keys ($ this-> originalText, $ word)))); 외부에서 메서드 이름을 인식하지 못하면 메서드 이름을 사용합니다 ... –

+0

PHP 파서는 실행 전에 모든 함수 선언을 파싱합니다. 함수 선언이 실행 경로에 포함 된 파일 집합의 어딘가에있는 한. 따라서 스크립트 맨 아래에 위치 할 수 있으며 스크립트 맨 위에서 참조되어 여전히 작동 할 수 있습니다. –

+0

나는 시도 할 것이다. 감사! –

0

해달라고.

범위를 제한하지 않고 상황을 덜 읽을 수 있기 때문에이 경우 함수 내에 함수를 정의 할 이유가 없습니다.

이와 같이 정의해야하는 경우 PHP function_exists 함수를 사용하여 map_FilteredWithOriginal을 한 번만 선언 할 수 있습니다.

0

여기서 예외를 포착 할 수 없습니다.

코드는 두 번 이상 mapWordsToOriginal()를 호출하여 재 선언 map_FilteredWithOriginal()의 때문에 치명적인 오류을 생산하고 있습니다.

if (FALSE === function_exists('map_FilteredWithOriginal')) 
{ 
    function map_FilteredWithOriginal($n, $m) 
    { 
     return(array(($n + 1) => ($m + 1))); 
    } 
} 

이렇게 생각하면 도움이 될 것입니다.

error_reporting() (개발 시간에만)을 사용하면 디버깅이 쉬워집니다. :)

error_reporting(E_ALL | E_STRICT); 

재미있게 보내십시오.