A lightweight lazy object library for PHP 8.4+ project.
LazyObject requires PHP >= 8.4.0.
composer require nick-lai/lazy-object
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;
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;
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;
LazyObject is released under the MIT License. See the bundled LICENSE file for details.