2013-03-23 211 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