Skip to content
This repository was archived by the owner on Feb 28, 2025. It is now read-only.

Commit 6dfae19

Browse files
committed
Optimise cached encoders structure
1 parent 75da7ee commit 6dfae19

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/Builder/BuilderEncoder.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use MongoDB\Exception\UnsupportedValueException;
2727
use stdClass;
2828

29+
use function array_key_exists;
2930
use function is_object;
3031

3132
/** @template-implements Encoder<stdClass|array|string, Pipeline|StageInterface|ExpressionInterface|QueryInterface> */
@@ -45,7 +46,7 @@ class BuilderEncoder implements Encoder
4546
OperatorInterface::class => OperatorEncoder::class,
4647
];
4748

48-
/** @var array<class-string, ExpressionEncoder> */
49+
/** @var array<class-string, ExpressionEncoder|null> */
4950
private array $cachedEncoders = [];
5051

5152
/** @param array<class-string, class-string<ExpressionEncoder>> $customEncoders */
@@ -77,17 +78,15 @@ public function encode(mixed $value): stdClass|array|string
7778
private function getEncoderFor(object $value): ExpressionEncoder|null
7879
{
7980
$valueClass = $value::class;
80-
if (isset($this->cachedEncoders[$valueClass])) {
81+
if (array_key_exists($valueClass, $this->cachedEncoders)) {
8182
return $this->cachedEncoders[$valueClass];
8283
}
8384

8485
$encoderList = $this->customEncoders + $this->defaultEncoders;
8586

8687
// First attempt: match class name exactly
87-
foreach ($encoderList as $className => $encoderClass) {
88-
if ($className === $valueClass) {
89-
return $this->cachedEncoders[$valueClass] = new $encoderClass($this);
90-
}
88+
if (isset($encoderList[$valueClass])) {
89+
return $this->cachedEncoders[$valueClass] = new $encoderList[$valueClass]($this);
9190
}
9291

9392
// Second attempt: catch child classes
@@ -97,6 +96,6 @@ private function getEncoderFor(object $value): ExpressionEncoder|null
9796
}
9897
}
9998

100-
return null;
99+
return $this->cachedEncoders[$valueClass] = null;
101100
}
102101
}

0 commit comments

Comments
 (0)