2 min read

Package Showcase: Simplifying Singleton Management in Laravel

Ever since the first "unofficial" RoadRunner+Laravel bridge came out back in 2019, I began writing Laravel applications with it to make the applications "long-running," which made the applications approximately 12 times faster than PHP-FPM.

That's a pretty significant improvement, right? But we're not here to talk about that. Since it's a long-running process, it makes sense to minimize memory usage that you wouldn't normally consider when you fork a process for a new HTTP request and then kill it after the request is processed, cleaning up the memory (a TL;DR of what PHP-FPM does).

However, with long-running processes, managing singleton classes becomes crucial (again, you want to minimize the memory usage as much as you can). Laravel's singleton() function in the IoC container is a great tool for that, but manually adding them in a service provider can become cumbersome, especially when dealing with many singletons.

What is a Singleton Class?

A singleton class ensures only one instance of itself exists throughout the application's lifetime. This can be beneficial for services like caching or configuration that don't require multiple instances.

The Challenge: Manual Registration Woes

Traditionally, you'd register singletons manually in a service provider like this:

class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->singleton(MySingletonClass::class);
    }
}

This approach becomes tedious and error-prone when managing numerous singletons.

Introducing sikhlana/laravel-singleton: Effortless Singleton Management

GitHub - sikhlana/laravel-singleton: A simple package to automatically mark a class as singleton in a Laravel app
A simple package to automatically mark a class as singleton in a Laravel app - sikhlana/laravel-singleton

This is where my package comes in handy. By simply implementing the Singleton interface within your class, you can eliminate the need for manual registration. This not only cleans up your codebase but also makes it more maintainable. You can focus on your application's core logic, while the package takes care of singleton management.

Happy Coding!