从匿名函数中使用变量
Using a variable out of an anonymous function
鉴于以下功能,我需要 calculateProducts()
到 return $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
"global"让calculateProducts()
可以return呢?
我试过 return $products
进入匿名函数然后 returning SoapWrapper 对象的值,当然这不会 return s 所需的 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;
}
我找到了答案。
应该使用闭包:
public function calculateProducts($params) {
function ($service) use ($data, &$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, &$products) {}
。
鉴于以下功能,我需要 calculateProducts()
到 return $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
"global"让calculateProducts()
可以return呢?
我试过 return $products
进入匿名函数然后 returning SoapWrapper 对象的值,当然这不会 return s 所需的 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;
}
我找到了答案。
应该使用闭包:
public function calculateProducts($params) {
function ($service) use ($data, &$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, &$products) {}
。