我有一个方法,需要参考
// CarService.php
public function getCars(&$carCollection = null)
{
$promise = // guzzle request for getting all cars would be here
$promise->then(function (ResponseInterface $response) use (&$carCollection) {
$cars= json_decode($response->getBody(), true);
$carCollection= new CarCollection($cars);
});
}
但是,在访问集合并尝试重用它时,我收到了错误
Argument 1 passed to {placeholder} must be an instance of {placeholder}, null given
我知道原因是,构造函数没有返回任何内容,但我怎样才能将我的变量分配给CarCollection
的新实例(扩展了Doctrine的ArrayCollection
)
我甚至尝试用静态方法作为解决方法
// CarCollection.php
public static function create(array $cars): CarCollection
{
$carCollection = new CarCollection($cars);
return $carCollection;
}
// CarService.php
public function getCars(&$carCollection = null)
{
$cars = // curl request for getting all cars would be here
$carCollection = CarCollection::create($cars)
}
但它仍然是空的。这是为什么?如何将引用变量设置为新类?
我访问这样的方法
$carService = $this->get('tzfrs.vehicle.services.car');
$carCollection = null;
$promises = [
$carService->getCars($carCollection)
];
\GuzzleHttp\Promise\unwrap($promises);
var_dump($carCollection); // null
直接设置参考时,例如
// CarService.php
public function getCars(&$carCollection = null)
{
$carCollection = new CarCollection([]);
}
它没有任何问题。似乎回调就是问题。
无论是谁投票,你能详细说明你投票结束的原因和原因吗?
答案 0 :(得分:0)
我可能误解了这个问题,但你应该能够在通过引用传递时修改一个对象。请参阅此处以获取示例:https://3v4l.org/KtFvZ
在您添加的后续示例代码中,您不应该通过引用传递$carCollection
,&
应仅在方法/函数定义中,而不是在调用它时提供。我认为这不是你的问题,应该在php7中抛出一个错误。