Установить указанную переменную для недавно инициализированного класса

У меня есть метод, который берет ссылку

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

это работает без проблем. Похоже, обратный вызов как-то проблема.

Кто бы это ни отрицал, не могли бы вы уточнить, почему и почему вы проголосовали за закрытие?

-2

Решение

Я мог бы неправильно понять вопрос, но вы должны иметь возможность изменять объект при передаче по ссылке. Смотрите здесь для примера: https://3v4l.org/KtFvZ

В последнем примере кода, который вы добавили, вы не должны передавать $carCollection по ссылке, & должен присутствовать только в определении метода / функции, а не при его вызове. Я не думаю, что это ваша проблема, это должно быть ошибка в php7.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]