2013-04-28 7 views
1

에서 값을 반환 할 수 없습니다.내가 PHP 기능이 기능

그러나 텍스트 /* placeholder - see explanation below */의 위치에 var_dump($unserialized)을 추가하면 예상되는 결과가 나옵니다.

왜 변수 ($unserialized)를 반환 할 수 없습니까? 함수의 해당 지점에서 gettype()을 사용하면 array을 반환합니다.

나는 Netbeans를 사용하고 있으며 모든 구문 강조 표시는 코드가 오타가 없도록 올바르게 형성되었음을 나타냅니다. 나는 당황 스럽다. 나는 정말 명백한 것을 놓쳤는가?

function unserialize_recursive($data, $i = 0) { 

$unserialized = unserialize($data); 

if ($unserialized) { 
    $i++; 
} 

if (!is_string($unserialized) || unserialize($unserialized) === FALSE) { 
    /* placeholder - see explanation below */ 
    return array($i, $unserialized); 
} elseif (unserialize($unserialized) !== FALSE) { 
    return unserialize_recursive($unserialized, $i); 
} 
return FALSE; 
} 
+0

왜 '거짓'대신에 '거짓'을 사용하고 있습니까? – Dai

+0

반품을 잊어 버린 것 같습니다. 참조로 $ i 매개 변수를 전달해야 할 수도 있습니다. – Revent

+0

@Dai : 그 질문은 꽤 관련성이 없지만 실제로는 관심이 있습니다. 의문점은 가독성을 위해 대문자 버전을 사용한다는 것입니다. – EpF

답변

0

에 당신은 (내가에게 $, $ 직렬화를) unserialize_recursive

앞에 반환 누락;

는 그래서 unserialize_recursive ($ 직렬화를, $ I)이

반환 같이해야한다;

return 함수가 없으면 실행되지만 조건과 실행 결과가 FALSE이면 반환됩니다. 리턴을 앞에 놓으면 현재 함수를 끝내고 다른 함수를 시작합니다.

+0

고마워요. 기능을 끝내고 다른 기능을 시작하는 것에 대한 부분은 나에게 가장 이해가되는 부분입니다. 실제로 내가 처음 작성한 방식대로 작동하지 않는 이유에 대해 아직도 혼란 스럽습니다. – EpF

2

내 생각 엔 당신이 수익을 잊고 있다는 것입니다.

따라서 var_dump ($ unserialized)는 재귀 호출에서 호출되지만 주 호출은 false를 반환합니다.

"unserialize_recursive ($ unserialized, $ i);"를 변경해야 할 수도 있습니다.

return unserialize_recursive($unserialized, $i); 
1

당신은 당신의 기능에 재귀를 사용

관련 문제