将引用的变量设置为新初始化的类

时间:2016-09-22 09:33:14

标签: php oop promise guzzle

我有一个方法,需要参考

// 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([]);
}

它没有任何问题。似乎回调就是问题。

无论是谁投票,你能详细说明你投票结束的原因和原因吗?

1 个答案:

答案 0 :(得分:0)

我可能误解了这个问题,但你应该能够在通过引用传递时修改一个对象。请参阅此处以获取示例:https://3v4l.org/KtFvZ

在您添加的后续示例代码中,您不应该通过引用传递$carCollection&应仅在方法/函数定义中,而不是在调用它时提供。我认为这不是你的问题,应该在php7中抛出一个错误。