nick-lai/lazy-object

A lightweight lazy object library for PHP 8.4+ project.

1.0.3 2024-12-19 15:47 UTC

This package is auto-updated.

Last update: 2025-03-19 16:26:11 UTC


README

Lazy Object

PSR-12 Static Analysis Tests Coverage Status PHP Version Require Latest Stable Version Total Downloads

LazyObject

A lightweight lazy object library for PHP 8.4+ project.

Table of Contents

Requirements

LazyObject requires PHP >= 8.4.0.

Installation

composer require nick-lai/lazy-object

Usage

LazyObjectTrait

use NickLai\LazyObject\LazyObjectTrait;

class NormalClass
{
    use LazyObjectTrait;

    public function __construct(
        public string $name,
    ) {
        echo 'Initialized.' . PHP_EOL;
    }
}

// Output: Initialized.
$normalClass = new NormalClass('Tom');
// Output: Hi, Tom!
echo "Hi, {$normalClass->name}!" . PHP_EOL;

$lazyObject = NormalClass::createLazyObject('Jerry');
// Outputs:
// Initialized.
// Hi, Jerry!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

$lazyObject = NormalClass::createLazyObjectByArgumentsGetter(fn () => [
    'name' => 'Spike',
]);
// Outputs:
// Initialized.
// Hi, Spike!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

$lazyObject = NormalClass::createLazyObjectByInitializer(fn ($object) => $object->__construct(
    name: 'Tyke',
));
// Outputs:
// Initialized.
// Hi, Tyke!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

LazyObjectFactory

use NickLai\LazyObject\LazyObjectFactory;

class NormalClass
{
    public function __construct(
        public string $name,
    ) {
        echo 'Initialized.' . PHP_EOL;
    }
}

$factory = LazyObjectFactory::create(NormalClass::class);

$lazyObject = $factory->createLazyObject('Jerry');
// Outputs:
// Initialized.
// Hi, Jerry!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

$lazyObject = $factory->createLazyObjectByArgumentsGetter(fn () => [
    'name' => 'Spike',
]);
// Outputs:
// Initialized.
// Hi, Spike!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

$lazyObject = $factory->createLazyObjectByInitializer(fn ($object) => $object->__construct(
    name: 'Tyke',
));
// Outputs:
// Initialized.
// Hi, Tyke!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

LazyObjectHelper

use NickLai\LazyObject\LazyObjectHelper;

class NormalClass
{
    public function __construct(
        public string $name,
    ) {
        echo 'Initialized.' . PHP_EOL;
    }
}

$lazyObject = LazyObjectHelper::createLazyObject(
    className: NormalClass::class,
    name: 'Jerry',
);
// Outputs:
// Initialized.
// Hi, Jerry!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

$lazyObject = LazyObjectHelper::createLazyObjectByArgumentsGetter(
    className: NormalClass::class,
    argumentsGetter: fn () => [
        'name' => 'Spike',
    ],
);
// Outputs:
// Initialized.
// Hi, Spike!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

$lazyObject = LazyObjectHelper::createLazyObjectByInitializer(
    className: NormalClass::class,
    initializer: fn ($object) => $object->__construct(
        name: 'Tyke',
    ),
);
// Outputs:
// Initialized.
// Hi, Tyke!
echo "Hi, {$lazyObject->name}!" . PHP_EOL;

License

LazyObject is released under the MIT License. See the bundled LICENSE file for details.