'hello'); self::assertSame('hello', $once()); self::assertSame('hello', $once()); } public function testNullReturnIsCachedCorrectly(): void { $calls = 0; $once = Once::wrap(function () use (&$calls): ?string { $calls++; return null; }); self::assertNull($once()); self::assertNull($once()); self::assertSame(1, $calls); } public function testEachInstanceIsIndependent(): void { $calls = 0; $fn = function () use (&$calls): int { return ++$calls; }; $a = Once::wrap($fn); $b = Once::wrap($fn); self::assertSame(1, $a()); self::assertSame(2, $b()); self::assertSame(1, $a()); self::assertSame(2, $b()); self::assertSame(2, $calls); } }