osmianski/super-objects

A library providing a base class for creating super objects in PHP, the ones with lazy properties, elegant dependency injection, and more.

v0.2.0 2023-01-28 13:40 UTC

This package is auto-updated.

Last update: 2024-12-28 17:47:43 UTC


README

Introduction

osmianski/super-objects package provides a base class for creating super objects in PHP. How a super object is different from its "traditional" counterpart:

  1. Its "lazy" properties are computed only once and only when they are accessed. Lazy properties, among other things, make dependency injection blazing fast and elegant.
  2. :) more features to come :)

Installation

In the project directory, run:

composer require osmianski/super-objects

Usage

Basic syntax

As in the following example, extend the SuperObject class, define a property in the class comment, and getter that computes it:

use Osmianski\SuperObjects\SuperObject;
...
/**
 * @property string $message
 */
class Foo extends SuperObject
{
    protected function get_message(): string {
        return 'Hello, world!';
    }
}

The first time you access the property, it's created and assigned the value returned by the getter. On subsequent property access, the getter is not executed - the already stored value is returned:

$foo = new Foo();

// executing the getter
echo $foo->message;

// using the stored value
echo $foo->message;

Alternatively, pass property value in the constructor:

$foo = new Foo(['message' => 'custom message']);

// prints the custom message
echo $foo->message;

If you expect the value to be passed in the constructor, throw the Required exception:

use Osmianski\SuperObjects\Exceptions\Required;
...
/**
 * @property string $message
 */
class Foo extends SuperObject
{
    protected function get_message(): string {
        throw new Required(__METHOD__);
    }
}

License

osmianski/super-objects package is open-sourced software licensed under the MIT license.