2016-10-08 6 views
1

次の関数が与えられた場合、$products配列を返すにはcalculateProducts()が必要です。匿名関数の変数を使用する

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()が返すことができますか?

私は、もちろん、これは必要なProductsResultオブジェクトの配列を返していません、以下を参照してください、無名関数へ $productsを返却しようとしたし、その後SoapWrapperオブジェクトの値を返してきた

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; 
    } 

答えて

0

私は答えが見つかりました。

一つは、クロージャを使用する必要があります。ここに

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) {}です。