我有一个方法,将参考引用变量设置为一个新初始化类
// 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
的新实例(延伸学说的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([]);
}
它的工作原理没有任何问题。似乎回调在某种程度上是问题。
无论谁低估了这个,你能否详细说明为什么和为什么你投票结束?
你能告诉我们你是如何调用getCars方法吗? – Petah
当然,我已经添加了一些代码 – Musterknabe
对不起@PeeHaa,我删除了它。以为它会在PHP 7下开发,而不是PHP 7 – Musterknabe