2013-03-23 212 views
0

我已經提出了一個curl請求。我把卷曲指令放在一個類函數中:無法從變量中獲取數據

class Curly { 
    var $data; 

    function GetRequest($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $this->data = curl_exec($ch); 
    curl_close($ch); 
    //this is what i was missing --> return $this->data; 
    } 

我把數據庫查詢放在另一個類的函數中。

include('class.curly.php'); 

class mongoSearchForInfoOnEsd { 
    public function getEsdsFbInfo($esdID) { 
    $mongoApiKey = "xx"; 
    $requestParams= "xx"; 
    $url = "xx"; 

    $fbInfo = (new Curly)->GetRequest($url); 
    //this is what i was missing --> return $fbInfo; 
    } 

在index.php,從一個網絡掛接的HTTP POST即將通過,在這種通過一些字符串解析,獲取2個IDS被處理。然後我發送其中一個id到mongodb curl請求,一切都很順利。正確的響應回來了,我只知道curly類中的var_dump的var_dump的這個b/c ....但是在索引文件中,我努力從var中獲取數據並分配它的值我想要的任何變量。

如何獲取數據?我知道它在那裏,但在哪裏? 我很困難。

# get ytID from http post 
#get EsdID from http post 
$httpPostData = file_get_contents('php://input'); 
$postDataDecoded = urldecode($httpPostData); 
$ytID = substr($postDataDecoded, strpos($postDataDecoded, "docid=") + strlen("docid="),); 
$esdID = substr($postDataDecoded, strpos($postDataDecoded, "m\": \"") + strlen ("m\": "),; 
*$esdData = (new mongoSearchForInfoOnEsd)->getEsdsFbInfo("$esdID");* 
$obj = json_decode($esdData, true); 
echo $obj; 

OK,我已經添加了回報,我可以看到數據,但沒有操作上返回的數據工作。

編輯--->把這兩個班的回報,現在它的全面運作。

+3

也許你需要'GetRequest()'返回''? – lazyhammer 2013-03-23 15:01:21

+0

這正是我剛纔說的.. – 2013-03-23 15:02:48

回答

1

正如lazyhammer說你需要寫在你的方法的GetRequest($網址)結束下面

return $this->data; 

此外,在一個班,一個function被稱爲method

更加明確。

var_dump不返回數據。它只是將它們發送到客戶端(您的瀏覽器),它將顯示它。

要將您的方法中計算的數據返回給調用方,您需要在方法結束時使用關鍵字return。 當您的計算機將看到return時,他將數據帶回給調用者。這意味着您在return之後所寫的所有內容都不會被執行。

1

僅僅因爲您正在爲類變量data賦值,並不表示該值將在您調用函數getRequest時返回。因此,爲了從外部類中使用的數據,你需要return終值:

function GetRequest($url){ 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $this->data = curl_exec($ch); 
    curl_close($ch); 

    return $this->data; 
} 

你可能甚至不需要保持變量$data周圍,除非有更多的代碼,你是不顯示,你可以簡單地返回curl_exec($ch)

從下面您的意見進一步回答你的問題,這是從php.net

該功能顯示結構化信息有關的一個或多個表情包括其類型和價值。數組和對象以遞歸的方式遞歸探索,其中值顯示爲結構。

正如你所看到的,var_dump僅用於顯示目的

+0

那麼爲什麼當我執行index.php腳本,我可以看到從var_dump返回的數據?這只是逗我,而不是讓我真正玩它? – sirvon 2013-03-23 15:06:02

+0

var_dump簡單地(正如其名稱所示)轉儲存儲在名爲'data'的類變量中的數據。但是,爲了將這些數據發送到函數被調用的類,您需要「返回」它。 – 2013-03-23 15:07:35

+0

'var_dump'通常用於調試目的,而不是任何事情,以便您可以查看某些數組或變量中存儲了哪些數據。 – 2013-03-23 15:08:00