2015-05-06 3 views
2

Я не знаю, как задать этот вопрос, но я пришел к чему-то, чего я не могу понять в пакете жужжания/жужжания для Laravel. Позвольте мне показать код, а затем я задать свой вопросУказатели в PHP, но не реальные указатели

$client = new \GuzzleHttp\Client(); 
$request = $client->createRequest('GET', 'http://foo.com'); 

$query = $request->getQuery(); 
$query['foo'] = 'bar'; 

$response = $client->send($request); 

здесь foo устанавливается в запросе. Как? Я мог бы это понять, если бы $request->getQuery() вернул указатель, но это не то, что действительно произошло здесь, не так.

Я бы ожидал, что какой-либо метод положит $query объект обратно в $request.

+0

\ GuzzleHttp \ Client => GuzzleHttp \ Client? –

+0

Он передается с '$ query ['foo']'. '[]' добавляет еще один массив в запрос $.^_^ –

ответ

6

Объекты передаются по ссылке в PHP.

в $ Объект запроса реализует ArrayAccess так $query['foo'] = 'bar'; так же, как делают $query->setFoo('bar');

+0

Часть с ArrayAccess была мне понятна, просто я забыл эту «маленькую» часть, что объекты передаются по ссылке. Спасибо, это в основном означает, что это указатель, поэтому все мои дальнейшие вопросы очищаются :) – Dexa

+1

И '$ query' сам является ссылкой на часть объекта' $ request', так что модификация '$ query' изменяет' $ request'. – alexis

+0

На самом деле это не указатель, как на C, http://php.net/manual/en/language.oop5.references.php –