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

Функция once

Функция once принимает замыкание в качестве аргумента и возвращает результат его выполнения. При повторном вызове функции с тем же замыканием возвращается кешированный результат, и замыкание не выполняется повторно. Это особенно полезно при работе с тяжёлыми вычислениями, запросами к базе данных или внешними API, результат которых должен быть получен только один раз.

Синтаксис

<?php once($callback); ?>

Параметр callback - это замыкание, которое должно быть выполнено один раз. Функция возвращает результат выполнения замыкания.

Пример

Рассмотрим простой пример использования функции once:

<?php use Illuminate\Support\Facades\Log; $res1 = once(function () { Log::info('Function executed'); return rand(1, 100); }); $res2 = once(function () { Log::info('Function executed'); return rand(1, 100); }); echo $res1; echo $res2; ?>

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

"42" "42"

Обратите внимание, что замыкание было выполнено только один раз, а во второй раз возвращён кешированный результат.

Пример

Функция once использует ключ для идентификации замыкания. Если ключи разные, замыкания будут выполнены отдельно:

<?php $res1 = once(function () { return rand(1, 10); }); $res2 = once(function () { return rand(1, 10); }); echo $res1; echo $res2; ?>

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

"7" "3"

В этом примере замыкания разные, поэтому функция once выполнила их оба и вернула разные результаты.

Пример

Функция once особенно полезна при работе с тяжелыми запросами к базе данных:

<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Support\Facades\DB; class UserController extends Controller { public function index() { $users = once(function () { return User::where('status', 'active') ->with('posts') ->get(); }); $count = $users->count(); return view('users.index', [ 'users' => $users, 'count' => $count ]); } } ?>

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

Пример

Рассмотрим случай, когда функция вызывается с одним и тем же замыканием, но разными ключами:

<?php $callback = function () { return 'Hello, World!'; }; $res1 = once($callback); $res2 = once($callback); $res3 = once($callback); echo $res1; echo $res2; echo $res3; ?>

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

"Hello, World!" "Hello, World!" "Hello, World!"

Здесь замыкание выполняется только один раз, а все последующие вызовы возвращают закешированный результат.

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

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