2017-01-11 3 views
1

私はGuzzle非同期要求を使用して、オブジェクトのプロパティをAPIレスポンスに基づいて設定しようとしています。Async PHP(Guzzle)を使用した可変スコープ

下記の$myObjのようなオブジェクトにアクセスするには、どのように応答ハンドラ内で操作しますか?

同様に、$myObjにはアクセスできません。私は、クラス内で作業するときに、$thisが応答ハンドラからアクセス可能であることを発見しましたが、別の方法があることを期待しています。

$myObj; 

$promise = $this->client->requestAsync('GET', 'http://example.com/api/someservice'); 
$promise->then(
    function (ResponseInterface $res) { 
    $data = json_decode($res->getBody()); 

    // How can I access vars like $myObj from here? 
    $myObj->setName($data->name); 
    // ... then persist to db 
    }, 
    function (RequestException $e) { 

    } 
}; 
+0

[匿名関数でPHP変数(http://stackoverflow.com/questions/11420520/php-variables-in-anonymous-functions)の可能性の重複 – Devon

答えて

3

PHPはデフォルトで関数コンテキストに変数をインポートしません。インポートする変数を明示的に表示するには、useを使用する必要があります。

function (ResponseInterface $res) use ($myObj) { 
    $data = json_decode($res->getBody()); 

    // How can I access vars like $myObj from here? 
    $myObj->setName($data->name); 
    // ... then persist to db 
}, 
-2

グローバルに$ myObjを作成できます。たとえば、行の上にglobal $myObj;という行を追加してください。$data = json_decode($res->getBody());

関連する問題