2010-08-04 2 views
1

Google api에 http 요청을 보내고 $ 결과를 반환하는 간단한 function1이 있습니다. 그렇다면 또 다른 함수 2가 있습니다. $ 결과가 나오면 $ result를 사용하여 계산을하고 $ finalresult를 반환해야합니다. .다음 함수가 시작되기 전에 변수가 반환되기를 기다리는 방법

내 문제는 Google 애널라이저 호출에 몇 초가 걸리며 $ 결과가 function1에 의해 반환 될 때까지 function2는 이미 $ result를 고려하지 않고 $ finalresult를 반환했습니다.

내가하고자하는 것은 function1을 완전히 실행하고 function2가 시작되기 전에 $ 결과를 반환하는 것입니다.

좋아요.이 함수는 $ 결과가 실제로 반환되는 것을 보장하지 않기 때문에 단순히 "sleep()"을 사용하지 않는 솔루션을 찾고 있습니다. (루프 몇 가지 방법이되지 않는 수면 (1) $ 리턴는 isset, 또는 뭔가 그런 때까지) 시각 여자들과 남자들

에 대한

샘플 코드

function1_geocode($address); // this function makes a http request to google and returns $result 
function2_proximitysearch(){ 
    if (isset($result)){ 
    //inevitably by the time the script gets there, $result hasn't been returned yet therefore none of the "some stuff" code is executed. 
    //some stuff 
    } 
    else { 
    //some other stuff 
    } 
} 

답변

6

PHP는 비동기 없습니다. 함수는 차례로 실행됩니다.

+3

가끔은 축복 이요 때로는 저주예요 ... – pxl

+2

축복입니다. 저를 믿으십시오, 당신은 항상 동시 프로그래밍을 강요하고 싶지 않을 것입니다. – Mchl

1

기능 1이 완료되면 기능 1을 호출하지 않는 이유는 무엇입니까?

추가적으로 Mchl이 옳습니다.

$foo = 0; 

$foo = function1(); 

if($foo > 0) 
    function2(); 

function1() 
{ 
    if($something) 
     $foo = 1; 
} 

function2() 
{ 
    $something = $else; 
} 

기능 (1) $ foo는의 값을 변경 한 경우에만 기능 2를 호출 그 방법 : 코드가 어쩌면 당신은과 같이 코드를 설정해야합니다 기능 2를 실행하기 전에 기능 1을 완료해야합니다.

귀하는 전체 코드를 게시 할 수 있으며 귀하가하려는 것을 알 수 있습니다.

1

PHP가 스레드되지 않으므로 function2_proximitysearch 전에 function1_geocode을 호출하면 항상 $result을 설정해야합니다.

0

function1_geocode ($ address)에 버그가 있거나 그 기능이 사용되는 방법에 대한 설명서가 누락되었을 수 있습니다.

예를 들어 두 번째 페이지로드로 처리 할 파일의 결과를 저장하여 비동기 기능을 좀 시뮬레이트 할 수 있습니다. 그러나 그러한 방식으로 구체적으로 설계되어야합니다. 하나의 PHP 페이지로드 내에서 프로세스를 백그라운드에서 실행할 수 없습니다.

관련 문제