【问题标题】:Avoid initializing a variable to store each()'s returns避免初始化一个变量来存储 each() 的返回值
【发布时间】:2017-07-01 13:08:13
【问题描述】:

我有这个代码:

class Menu
{
    public function render()
    {
        $res = '';

        collect($this->items)->each(function ($item) use (&$res) {
            $res .= $item->render();
        });

        return $res;
    }
}

我想返回相同的值,但删除 $res。有什么方法可以实现吗?

【问题讨论】:

    标签: php laravel each


    【解决方案1】:

    你可以雇佣array_reduce

    class Menu
    {
        public function render()
        {
            return array_reduce(collect($this->items)->toArray(), function ($res, $item) {
                return $res . $item->render();
            }, '');
        }
    }
    

    但效率较低,因为$res 的值将被复制而不是通过引用传递。

    【讨论】:

      【解决方案2】:

      这样解决了:

      class Menu
      {
          public function render()
          {
              return collect($this->items())->reduce(function ($carry, $item) {
                  return $carry . $item->render();
              }, '');
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-15
        • 1970-01-01
        • 2021-10-28
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多