Package

Spatie Once

A magic memoization function

Package

spatie/once

View on GitHub →

Spatie once Package Summary

The Spatie once package introduces an effective way to implement memoization in PHP applications, particularly with Laravel. By using the once function, developers can ensure that specific computations are only executed once per request, caching the result for subsequent calls within the same execution scope.

Key Features

  • Memoization Simplified: Easily cache the results of functions to optimize performance, especially useful when dealing with expensive operations like database calls or complex computations.
  • Easy to Use: The package provides a straightforward interface where you simply wrap your callable within the once function to utilize caching.
  • Context-Aware Caching: It differentiates cache based on the function and method context, ensuring that cache storage is unique to each callable’s use-case.
  • Flush and Disable Cache: Offers methods to flush the entire cache or temporarily disable caching, useful for scenarios like testing where fresh results are needed.
  • Supports Static Contexts: Works seamlessly in both non-static and static method contexts, providing flexibility in how it's integrated into your application.
  • Octane Compatibility: Beta support for Laravel Octane, ensuring that the package works correctly in long-lived applications by flushing cache post-request.

Installation

Install the package via composer:

composer require spatie/once

Usage Example

Here’s a basic usage example where the result of a random number generation is cached:

$myClass = new class() {
public function getNumber(): int {
return once(function () {
return rand(1, 10000);
});
}
};

Calling $myClass->getNumber() repeatedly within the same request will always return the same number.

Advanced Usage

  • Flushing the Cache: Clear all cached results.
    Spatie\Once\Cache::getInstance()->flush();
  • Disabling the Cache: Useful for development or tests.
    Spatie\Once\Cache::getInstance()->disable();
    Spatie\Once\Cache::getInstance()->enable();

Under the Hood

  • Utilizes PHP's Weakmap for efficient, automatic garbage collection of cache entries.
  • Employs the backtrace of function calls to uniquely identify caching scenarios.

Community and Contributions

The package is open for contributions, and the maintainers encourage feedback and community engagement through postcards and discussions on GitHub.

For a more visual explanation of how once works and its benefits, the documentation provides a video tutorial link.

Overall, Spatie's once package is an essential tool for developers looking to optimize PHP applications by reducing redundant processing and improving response times through effective function result caching.

Spatie Once Related Articles

Memoization and Function Caching with this PHP Package image

Memoization and Function Caching with this PHP Package

Read article
The once() Memoization Helper is Coming to Laravel 11 image

The once() Memoization Helper is Coming to Laravel 11

Read article
Laravel Mobile Pass: Generate Apple Wallet and Google Wallet Passes image

Laravel Mobile Pass: Generate Apple Wallet and Google Wallet Passes

Read article
Share Error Package for Laravel's New Exception Page image

Share Error Package for Laravel's New Exception Page

Read article
Laravel Collective HTML package is abandoned image

Laravel Collective HTML package is abandoned

Read article
Learn how to upload files in Laravel like a Pro image

Learn how to upload files in Laravel like a Pro

Read article
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $9500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
Acquaint Softtech logo

Acquaint Softtech

Acquaint Softtech offers AI-ready Laravel developers who onboard in 48 hours at $3000/Month with no lengthy sales process and a 100 percent money-back guarantee.

Acquaint Softtech
PhpStorm logo

PhpStorm

The go-to PHP IDE with extensive out-of-the-box support for Laravel and its ecosystem.

PhpStorm
Pushsilver logo

Pushsilver

Pushsilver is simple invoicing for freelancers and small studios — send polished invoices, automate reminders, and get paid on time without the bloat.

Pushsilver
Harpoon: Next generation time tracking and invoicing logo

Harpoon: Next generation time tracking and invoicing

The next generation time-tracking and billing software that helps your agency plan and forecast a profitable future.

Harpoon: Next generation time tracking and invoicing
Shift logo

Shift

Running an old Laravel version? Instant, automated Laravel upgrades and code modernization to keep your applications fresh.

Shift