2010-08-04 52 views
1

我有一個簡單的函數1,它向http api執行http請求並返回$ result。 然後我有另一個function2,如果$ result isset,應該使用$ result做一些計算,然後返回$ finalresult。 。如何在下一個函數啓動之前等待變量返回

我的問題是,調用谷歌api需要幾秒鐘,並由時間$ result返回的function1,function2已經返回$ finalresult沒有考慮$結果。

我期望做的是讓function1完全運行,並在function2開始前返回$ result。

最好我正在尋找一種不是簡單地使用「sleep()」的解決方案,因爲此函數不能保證實際返回$ result。 (除非有某種方式來循環睡眠(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 2010-08-04 22:25:36

+2

這是一種祝福。相信我,你不會希望被迫隨時進行併發編程。 – Mchl 2010-08-04 22:29:07

1

爲什麼你沒有功能1當調用完成後調用函數2?

另外,Mchl是對的。功能1將要完成的代碼執行功能2.前也許你應該設置你的代碼如下所示:

$foo = 0; 

$foo = function1(); 

if($foo > 0) 
    function2(); 

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

function2() 
{ 
    $something = $else; 
} 

這樣,如果功能改變1 $ foo的值只會調用函數2。

您可以發佈您的完整代碼,我們會知道您要做什麼。

1

PHP不是線程的,所以如果您在function2_proximitysearch之前調用function1_geocode,則應始終設置$result

0

可能是因爲function1_geocode($ address)有一個bug,否則你可能會丟失一些關於如何使用該函數的文檔。

它可以模擬異步功能,例如將結果保存在一個文件中,由第二個頁面加載來處理。但那必須以這種方式進行專門設計。在一個PHP頁面加載中,你不能在後臺運行一個進程。

相關問題