#php #return #anonymous-function
#php #Возврат #anonymous-функция
Вопрос:
Учитывая следующую функцию, мне нужно calculateProducts()
вернуть $products
массив.
public function calculateProducts($params) {
SoapWrapper::service('calculateProducts',
function ($service) use ($data) {
$listProducts = $service->call('calculateProducts');
foreach ($listProducts->return->productList as $pdt) {
$product = new ProductsResult;
$product->valueA = "a";
$product->valueB = "b";
$product->save();
$products[] = $product;
}
}
);
return $products;
}
Это не работает: я предполагаю, что я путаюсь с анонимной функцией (функции, которые я сейчас с трудом читаю), поскольку $products
в нее входит.
Как сделать $products
«глобальный», чтобы calculateProducts()
он мог его возвращать?
Я попытался вернуться $products
в анонимную функцию, а затем вернуть значение объекта SoapWrapper, конечно, это не возвращает необходимый массив объектов ProductsResult, см. Ниже :
public function calculateProducts($params) {
$pdts = SoapWrapper::service('calculateProducts',
function ($service) use ($data) {
$listProducts = $service->call('calculateProducts');
foreach ($listProducts->return->productList as $pdt) {
$product = new ProductsResult;
$product->valueA = "a";
$product->valueB = "b";
$product->save();
$products[] = $product;
}
return $products;
}
);
return $pdts;
}
Ответ №1:
Я нашел ответ.
Следует использовать замыкание :
public function calculateProducts($params) {
function ($service) use ($data, amp;$products) {
$listProducts = $service->call('calculateProducts');
foreach ($listProducts->return->productList as $pdt) {
$product = new ProductsResult;
$product->valueA = "a";
$product->valueB = "b";
$product->save();
$products[] = $product;
}
}
return $products;
}
Ключ здесь function ($service) use ($data, amp;$products) {}
.