无法从变量中获取数据

时间:2013-03-23 14:58:11

标签: php json variables curl

我已经提出了卷曲请求。我将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中,来自webhook的HTTP帖子正在通过,其中解析了一些字符串以获得2个ID。然后我将其中一个id发送到mongodb curl请求,一切顺利。正确的响应回来了,我只知道卷曲类中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;

好的,我已添加了返回,我可以看到数据,但没有任何操作正在处理返回的数据。

编辑--->在两个班级中都有回报,现在它完全可以运作了。

2 个答案:

答案 0 :(得分: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仅用于显示目的

答案 1 :(得分:1)

正如lazyhammer所说,你需要在方法GetRequest($ url)

的最后编写以下内容
return $this->data;

此外,在课堂上,function称为method

更明确。

var_dump不会返回数据。它只会将它们发送到将显示它的客户端(您的浏览器)。

要将方法中计算的数据返回给调用者,您需要在方法的末尾使用关键字return。 当您的计算机看到return时,他会将数据恢复给来电者。它意味着在return之后你写的所有东西都不会被执行。