Функция tap
Функция tap принимает два параметра: значение, которое нужно "протащить" через функцию, и замыкание, выполняющее побочное действие над этим значением. После выполнения замыкания функция возвращает исходное значение без изменений. Это полезно для отладки, логирования или выполнения дополнительных операций в цепочках методов.
Синтаксис
<?php
tap($value, $callback);
?>
Пример
Давайте создадим строку и выведем её в лог, а затем продолжим работу со строкой:
<?php
use Illuminate\Support\Facades\Log;
class ExampleController extends Controller
{
public function index()
{
$res = tap('abcde', function ($value) {
Log::info('Processing value: ' . $value);
});
echo $res;
}
}
?>
Результат выполнения кода:
"abcde"
При этом в лог будет записано сообщение "Processing value: abcde", а переменная $res содержит исходную строку.
Пример
Давайте используем tap в цепочке методов, чтобы проанализировать промежуточное значение:
<?php
use App\Models\Article;
use Illuminate\Support\Facades\Log;
class ArticleController extends Controller
{
public function index()
{
$res = Article::where('status', 'published')
->tap(function ($query) {
$count = $query->count();
Log::info('Found ' . $count . ' published articles');
})
->get();
echo $res;
}
}
?>
Результат выполнения кода:
[{"id":1,"title":"article 1","status":"published"},{"id":2,"title":"article 2","status":"published"}]
Метод tap в этом примере позволяет залогировать количество найденных записей до выполнения запроса с помощью get.
Пример
Давайте используем tap для модификации коллекции с побочным эффектом:
<?php
use Illuminate\Support\Collection;
class CollectionController extends Controller
{
public function index()
{
$res = collect([1, 2, 3, 4, 5])
->tap(function ($collection) {
$collection->push(6);
})
->map(function ($item) {
return $item * 2;
});
echo $res;
}
}
?>
Результат выполнения кода:
[2,4,6,8,10,12]
Функция tap позволяет добавить элемент в коллекцию как побочное действие, а затем продолжить цепочку методов с изменённой коллекцией.
Смотрите также
-
функция
dd,
которая выводит содержимое переменной и останавливает выполнение скрипта -
функция
dump,
которая выводит содержимое переменной без остановки скрипта -
функция
with,
которая возвращает переданное значение без изменений -
метод
tapколлекции,
который позволяет выполнить побочное действие над коллекцией