0

カールリクエストをしました。私はcurl命令を1つのクラス関数に入れました:

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の1つを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;

OK、returnを追加しました。データを確認できますが、返されたデータに対して操作が機能していません。

編集--->両方のクラスにreturnを入れ、完全に機能するようになりました。

4

2 に答える 2

1

lazyhammerが言ったように、メソッドの最後に次のように書く必要がありますGetRequest($ url)

return $this->data;

また、クラスでは、afunctionは。と呼ばれmethodます。

より明確にするため。

var_dumpデータを返しません。それはそれを表示するクライアント(あなたのブラウザ)にそれらを送るだけです。

メソッドで計算されたデータを呼び出し元に戻すには、returnメソッドの最後でキーワードを使用する必要があります。あなたのコンピュータが見るとき、return彼はデータを発信者に戻します。それはあなたが後に書くすべてreturnが実行されないことを意味します。

于 2013-03-23T15:07:01.643 に答える
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からのものです。

この関数は、型と値を含む 1 つ以上の式に関する構造化された情報を表示します。配列とオブジェクトは、構造を示すためにインデントされた値で再帰的に探索されます。

ご覧のとおり、は表示目的でvar_dumpのみ使用されます。

于 2013-03-23T15:04:38.957 に答える