> $values * @return void */ protected function __construct(protected WeakMap $values) { // } /** * Create a new once instance. * * @return static */ public static function instance() { return static::$instance ??= new static(new WeakMap); } /** * Get the value of the given onceable. * * @param Onceable $onceable * @return mixed */ public function value(Onceable $onceable) { if (! static::$enabled) { return call_user_func($onceable->callable); } $object = $onceable->object ?: $this; $hash = $onceable->hash; if (isset($this->values[$object][$hash])) { return $this->values[$object][$hash]; } if (! isset($this->values[$object])) { $this->values[$object] = []; } return $this->values[$object][$hash] = call_user_func($onceable->callable); } /** * Re-enable the once instance if it was disabled. * * @return void */ public static function enable() { static::$enabled = true; } /** * Disable the once instance. * * @return void */ public static function disable() { static::$enabled = false; } /** * Flush the once instance. * * @return void */ public static function flush() { static::$instance = null; } }