2017-02-13 23 views
0

У меня есть этот код:Избегайте инициализации переменной для хранения возвращает каждый() 's

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

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

     return $res; 
    } 
} 

Я хотел бы вернуть то же значение, но удаление $res. Есть ли способ достичь этого?

ответ

0

Вы можете использовать array_reduce:

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

, но он менее эффективен, так как значение $res будет скопировано вместо передается по ссылке.

0

решаемые это следующим образом:

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