|
33 | 33 | final class ObjectNormalizer extends AbstractObjectNormalizer
|
34 | 34 | {
|
35 | 35 | private static $reflectionCache = [];
|
| 36 | + private static $isReadableCache = []; |
| 37 | + private static $isWritableCache = []; |
36 | 38 |
|
37 | 39 | protected PropertyAccessorInterface $propertyAccessor;
|
38 | 40 | protected $propertyInfoExtractor;
|
@@ -170,21 +172,23 @@ protected function isAllowedAttribute($classOrObject, string $attribute, ?string
|
170 | 172 | if (!parent::isAllowedAttribute($classOrObject, $attribute, $format, $context)) {
|
171 | 173 | return false;
|
172 | 174 | }
|
| 175 | + |
173 | 176 | $class = \is_object($classOrObject) ? \get_class($classOrObject) : $classOrObject;
|
174 | 177 |
|
175 | 178 | if ($context['_read_attributes'] ?? true) {
|
176 |
| - return $this->propertyInfoExtractor->isReadable($class, $attribute) || $this->hasAttributeAccessorMethod($class, $attribute); |
177 |
| - } |
| 179 | + if (!isset(self::$isReadableCache[$class.$attribute])) { |
| 180 | + self::$isReadableCache[$class.$attribute] = $this->propertyInfoExtractor->isReadable($class, $attribute) || $this->hasAttributeAccessorMethod($class, $attribute); |
| 181 | + } |
178 | 182 |
|
179 |
| - if ($this->propertyInfoExtractor->isWritable($class, $attribute)) { |
180 |
| - return true; |
| 183 | + return self::$isReadableCache[$class.$attribute]; |
181 | 184 | }
|
182 | 185 |
|
183 |
| - if (($writeInfo = $this->writeInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType()) { |
184 |
| - return true; |
| 186 | + if (!isset(self::$isWritableCache[$class.$attribute])) { |
| 187 | + self::$isWritableCache[$class.$attribute] = $this->propertyInfoExtractor->isWritable($class, $attribute) |
| 188 | + || (($writeInfo = $this->writeInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType()); |
185 | 189 | }
|
186 | 190 |
|
187 |
| - return false; |
| 191 | + return self::$isWritableCache[$class.$attribute]; |
188 | 192 | }
|
189 | 193 |
|
190 | 194 | private function hasAttributeAccessorMethod(string $class, string $attribute): bool
|
|
0 commit comments