From acde9f4572f090c53cd3103aedbd25c69f30e15f Mon Sep 17 00:00:00 2001 From: Andrea Marco Sartori Date: Mon, 14 Nov 2022 18:44:48 +1000 Subject: [PATCH] Reduce number of token instances --- src/Tokens/Tokenizer.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Tokens/Tokenizer.php b/src/Tokens/Tokenizer.php index 66d5f0f..6f97985 100644 --- a/src/Tokens/Tokenizer.php +++ b/src/Tokens/Tokenizer.php @@ -9,11 +9,11 @@ namespace Cerbero\JsonParser\Tokens; class Tokenizer { /** - * The map of token instances. + * The map of token instances by type. * * @var array */ - protected static array $tokensMap = []; + protected static array $tokensMap; /** * Instantiate the class. @@ -21,23 +21,23 @@ class Tokenizer */ public function __construct() { - $this->hydrateTokens(); + static::$tokensMap ??= $this->hydrateTokensMap(); } /** - * Set the hydrated tokens + * Retrieve the hydrated tokens map * - * @return void + * @return array */ - protected function hydrateTokens(): void + protected function hydrateTokensMap(): array { - if (static::$tokensMap) { - return; - } + $map = $instances = []; foreach (Tokens::MAP as $type => $class) { - static::$tokensMap[$type] = new $class(); + $map[$type] = $instances[$class] ??= new $class(); } + + return $map; } /**