【问题标题】:Using a variable out of an anonymous function从匿名函数中使用变量
【发布时间】:2017-02-17 09:14:31
【问题描述】:

给定以下函数,我需要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;
    }

【问题讨论】:

    标签: php return anonymous-function


    【解决方案1】:

    我找到了答案。

    应该使用闭包:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2022-11-10
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多