РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1024 of 1392 menu

Метод tap

Метод tap принимает два параметра: значение и замыкание. Замыкание получает переданное значение и может выполнять с ним любые действия, но результат работы замыкания игнорируется. Метод всегда возвращает исходное значение. Это позволяет вставлять побочные эффекты, такие как логирование, отладка или изменение объектов по ссылке, в середину цепочек методов без разрыва цепочки.

Синтаксис

<?php tap($value, function ($item) { // побочное действие }); ?>

Пример

Используем метод tap для вывода промежуточного значения в цепочке методов коллекции:

<?php namespace AppHttpControllers; use IlluminateSupportCollection; class ExampleController extends Controller { public function index() { $res = collect([1, 2, 3, 4, 5]) ->map(function ($item) { return $item * 2; }) ->tap(function ($item) { echo $item->count(); }) ->filter(function ($item) { return $item > 5; }); echo $res; } } ?>

Результат выполнения кода:

"5[6, 8, 10]"

Сначала вывелось количество элементов коллекции (5), затем результат фильтрации.

Пример

Используем метод tap для логирования перед сохранением модели в базу данных:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesLog; class ArticleController extends Controller { public function store() { $article = new Article(); $article->title = 'article'; $article->text = 'text'; $res = tap($article, function ($item) { Log::info('Создана статья: ' . $item->title); })->save(); echo $res; } } ?>

Результат выполнения кода:

"true"

В лог записано сообщение, а метод вернул результат сохранения.

Пример

Используем метод tap для выполнения действий с объектом до его возврата из метода:

<?php namespace AppHttpControllers; use AppModelsUser; use IlluminateSupportFacadesHash; class UserController extends Controller { public function createUser() { return tap(new User(), function ($item) { $item->name = 'user'; $item->email = 'user@example.com'; $item->password = Hash::make('password'); $item->save(); }); } public function index() { $res = $this->createUser(); echo $res->name; } } ?>

Результат выполнения кода:

"user"

Пример

Используем метод tap для отладки значений в цепочке методов Eloquent:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesDB; class ArticleController extends Controller { public function index() { $res = Article::where('id', '>', 1) ->tap(function ($query) { DB::enableQueryLog(); }) ->where('status', 'published') ->tap(function ($query) { $logs = DB::getQueryLog(); echo count($logs); }) ->get(); echo $res; } } ?>

Результат выполнения кода:

"1[{"id":2,"title":"article 2","status":"published"},{"id":3,"title":"article 3","status":"published"}]"

Смотрите также

  • функция tap,
    которая выполняет побочное действие над значением
  • метод tap,
    который применяется к коллекциям
  • метод pipe,
    который передаёт коллекцию в функцию и возвращает её результат
  • метод when,
    который выполняет действие при выполнении условия
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить