PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 2.8.3
Kubio AI Page Builder v2.8.3
2.8.4 2.8.3 2.8.2 2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / vendor / symfony / property-info / PropertyInfoCacheExtractor.php
kubio / vendor / symfony / property-info Last commit date
DependencyInjection 1 year ago Extractor 1 year ago PhpStan 1 year ago Util 1 year ago CHANGELOG.md 1 year ago LICENSE 1 year ago PropertyAccessExtractorInterface.php 1 year ago PropertyDescriptionExtractorInterface.php 1 year ago PropertyInfoCacheExtractor.php 1 year ago PropertyInfoExtractor.php 1 year ago PropertyInfoExtractorInterface.php 1 year ago PropertyInitializableExtractorInterface.php 1 year ago PropertyListExtractorInterface.php 1 year ago PropertyReadInfo.php 1 year ago PropertyReadInfoExtractorInterface.php 1 year ago PropertyTypeExtractorInterface.php 1 year ago PropertyWriteInfo.php 1 year ago PropertyWriteInfoExtractorInterface.php 1 year ago README.md 1 year ago Type.php 1 year ago composer.json 1 year ago
PropertyInfoCacheExtractor.php
125 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\PropertyInfo;
13
14 use Psr\Cache\CacheItemPoolInterface;
15
16 /**
17 * Adds a PSR-6 cache layer on top of an extractor.
18 *
19 * @author Kévin Dunglas <dunglas@gmail.com>
20 *
21 * @final
22 */
23 class PropertyInfoCacheExtractor implements PropertyInfoExtractorInterface, PropertyInitializableExtractorInterface
24 {
25 private $propertyInfoExtractor;
26 private $cacheItemPool;
27 private $arrayCache = [];
28
29 public function __construct(PropertyInfoExtractorInterface $propertyInfoExtractor, CacheItemPoolInterface $cacheItemPool)
30 {
31 $this->propertyInfoExtractor = $propertyInfoExtractor;
32 $this->cacheItemPool = $cacheItemPool;
33 }
34
35 /**
36 * {@inheritdoc}
37 */
38 public function isReadable(string $class, string $property, array $context = []): ?bool
39 {
40 return $this->extract('isReadable', [$class, $property, $context]);
41 }
42
43 /**
44 * {@inheritdoc}
45 */
46 public function isWritable(string $class, string $property, array $context = []): ?bool
47 {
48 return $this->extract('isWritable', [$class, $property, $context]);
49 }
50
51 /**
52 * {@inheritdoc}
53 */
54 public function getShortDescription(string $class, string $property, array $context = []): ?string
55 {
56 return $this->extract('getShortDescription', [$class, $property, $context]);
57 }
58
59 /**
60 * {@inheritdoc}
61 */
62 public function getLongDescription(string $class, string $property, array $context = []): ?string
63 {
64 return $this->extract('getLongDescription', [$class, $property, $context]);
65 }
66
67 /**
68 * {@inheritdoc}
69 */
70 public function getProperties(string $class, array $context = []): ?array
71 {
72 return $this->extract('getProperties', [$class, $context]);
73 }
74
75 /**
76 * {@inheritdoc}
77 */
78 public function getTypes(string $class, string $property, array $context = []): ?array
79 {
80 return $this->extract('getTypes', [$class, $property, $context]);
81 }
82
83 /**
84 * {@inheritdoc}
85 */
86 public function isInitializable(string $class, string $property, array $context = []): ?bool
87 {
88 return $this->extract('isInitializable', [$class, $property, $context]);
89 }
90
91 /**
92 * Retrieves the cached data if applicable or delegates to the decorated extractor.
93 *
94 * @return mixed
95 */
96 private function extract(string $method, array $arguments)
97 {
98 try {
99 $serializedArguments = serialize($arguments);
100 } catch (\Exception $exception) {
101 // If arguments are not serializable, skip the cache
102 return $this->propertyInfoExtractor->{$method}(...$arguments);
103 }
104
105 // Calling rawurlencode escapes special characters not allowed in PSR-6's keys
106 $key = rawurlencode($method.'.'.$serializedArguments);
107
108 if (\array_key_exists($key, $this->arrayCache)) {
109 return $this->arrayCache[$key];
110 }
111
112 $item = $this->cacheItemPool->getItem($key);
113
114 if ($item->isHit()) {
115 return $this->arrayCache[$key] = $item->get();
116 }
117
118 $value = $this->propertyInfoExtractor->{$method}(...$arguments);
119 $item->set($value);
120 $this->cacheItemPool->save($item);
121
122 return $this->arrayCache[$key] = $value;
123 }
124 }
125