From ee93954adf113b33cb6e6b710241c633aaea865e Mon Sep 17 00:00:00 2001 From: Bogdan Date: Mon, 9 Nov 2026 21:02:54 +0100 Subject: [PATCH] perf: cache type keys in DataConverter to avoid repeated array_keys calls --- system/DataConverter/DataConverter.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/system/DataConverter/DataConverter.php b/system/DataConverter/DataConverter.php index 123e1eefe72b..25e38936fd9d 100644 --- a/system/DataConverter/DataConverter.php +++ b/system/DataConverter/DataConverter.php @@ -29,6 +29,13 @@ */ private DataCaster $dataCaster; + /** + * List of field names defined in $types. + * + * @var list + */ + private array $typeFields; + /** * @param array $castHandlers Custom convert handlers * @@ -62,6 +69,7 @@ public function __construct( private Closure|string|null $extractor = null, ) { $this->dataCaster = new DataCaster($castHandlers, $types, $this->helper); + $this->typeFields = array_keys($types); } /** @@ -75,7 +83,7 @@ public function __construct( */ public function fromDataSource(array $data): array { - foreach (array_keys($this->types) as $field) { + foreach ($this->typeFields as $field) { if (array_key_exists($field, $data)) { $data[$field] = $this->dataCaster->castAs($data[$field], $field, 'get'); } @@ -95,7 +103,7 @@ public function fromDataSource(array $data): array */ public function toDataSource(array $phpData): array { - foreach (array_keys($this->types) as $field) { + foreach ($this->typeFields as $field) { if (array_key_exists($field, $phpData)) { $phpData[$field] = $this->dataCaster->castAs($phpData[$field], $field, 'set'); }