2016-09-22 51 views
-2

我有一个方法,将参考引用变量设置为一个新初始化类

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

它的工作原理没有任何问题。似乎回调在某种程度上是问题。

无论谁低估了这个,你能否详细说明为什么和为什么你投票结束?

+0

你能告诉我们你是如何调用getCars方法吗? – Petah

+0

当然,我已经添加了一些代码 – Musterknabe

+0

对不起@PeeHaa,我删除了它。以为它会在PHP 7下开发,而不是PHP 7 – Musterknabe

回答

0

我可能会误解这个问题,但您应该可以在通过引用传递时修改对象。在这里看到的例子:https://3v4l.org/KtFvZ

在您添加后来的示例代码,你不应该通过引用传递$carCollection,该&只应在方法/函数确定指标,当你调用它没有提供。我不认为这是你的问题,但应该是在php7中抛出一个错误。

+0

你是对的,抱歉。我在方法调用中没有'&'。是一个写错误。但它仍然不起作用。当我做一个'echo get_class'时,它返回'Controller',在那里我调用'CarService',所以它看起来像是以某种方式设置自己 – Musterknabe

+0

好吧,我以某种方式跟踪错误。当我直接在方法中设置变量时,它的工作没有问题,但在我的情况下,我有另一个回调函数,当我在那里设置'$ carCollection'时,它不起作用。我会更新我的代码 – Musterknabe