2016-10-08 6 views
1

Учитывая следующую функцию, мне нужно 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 "global", так что 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; 
    } 

ответ

0

I Мы нашли ответ.

Необходимо использовать замыкание:

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) {}.

Смежные вопросы