nick-lai / lazy-object
A lightweight lazy object library for PHP 8.4+ project.
1.0.3
2024-12-19 15:47 UTC
Requires
- php: ^8.4
Requires (Dev)
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.5
- squizlabs/php_codesniffer: ^3.11
README
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.