* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\PropertyAccess; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\PropertyInfo\PropertyReadInfoExtractorInterface; use Symfony\Component\PropertyInfo\PropertyWriteInfoExtractorInterface; /** * A configurable builder to create a PropertyAccessor. * * @author Jérémie Augustin */ class PropertyAccessorBuilder { /** @var int */ private $magicMethods = PropertyAccessor::MAGIC_GET | PropertyAccessor::MAGIC_SET; private $throwExceptionOnInvalidIndex = false; private $throwExceptionOnInvalidPropertyPath = true; /** * @var CacheItemPoolInterface|null */ private $cacheItemPool; /** * @var PropertyReadInfoExtractorInterface|null */ private $readInfoExtractor; /** * @var PropertyWriteInfoExtractorInterface|null */ private $writeInfoExtractor; /** * Enables the use of all magic methods by the PropertyAccessor. */ public function enableMagicMethods(): self { $this->magicMethods = PropertyAccessor::MAGIC_GET | PropertyAccessor::MAGIC_SET | PropertyAccessor::MAGIC_CALL; return $this; } /** * Disable the use of all magic methods by the PropertyAccessor. */ public function disableMagicMethods(): self { $this->magicMethods = PropertyAccessor::DISALLOW_MAGIC_METHODS; return $this; } /** * Enables the use of "__call" by the PropertyAccessor. * * @return $this */ public function enableMagicCall() { $this->magicMethods |= PropertyAccessor::MAGIC_CALL; return $this; } /** * Enables the use of "__get" by the PropertyAccessor. */ public function enableMagicGet(): self { $this->magicMethods |= PropertyAccessor::MAGIC_GET; return $this; } /** * Enables the use of "__set" by the PropertyAccessor. */ public function enableMagicSet(): self { $this->magicMethods |= PropertyAccessor::MAGIC_SET; return $this; } /** * Disables the use of "__call" by the PropertyAccessor. * * @return $this */ public function disableMagicCall() { $this->magicMethods &= ~PropertyAccessor::MAGIC_CALL; return $this; } /** * Disables the use of "__get" by the PropertyAccessor. */ public function disableMagicGet(): self { $this->magicMethods &= ~PropertyAccessor::MAGIC_GET; return $this; } /** * Disables the use of "__set" by the PropertyAccessor. */ public function disableMagicSet(): self { $this->magicMethods &= ~PropertyAccessor::MAGIC_SET; return $this; } /** * @return bool whether the use of "__call" by the PropertyAccessor is enabled */ public function isMagicCallEnabled() { return (bool) ($this->magicMethods & PropertyAccessor::MAGIC_CALL); } /** * @return bool whether the use of "__get" by the PropertyAccessor is enabled */ public function isMagicGetEnabled(): bool { return $this->magicMethods & PropertyAccessor::MAGIC_GET; } /** * @return bool whether the use of "__set" by the PropertyAccessor is enabled */ public function isMagicSetEnabled(): bool { return $this->magicMethods & PropertyAccessor::MAGIC_SET; } /** * Enables exceptions when reading a non-existing index. * * This has no influence on writing non-existing indices with PropertyAccessorInterface::setValue() * which are always created on-the-fly. * * @return $this */ public function enableExceptionOnInvalidIndex() { $this->throwExceptionOnInvalidIndex = true; return $this; } /** * Disables exceptions when reading a non-existing index. * * Instead, null is returned when calling PropertyAccessorInterface::getValue() on a non-existing index. * * @return $this */ public function disableExceptionOnInvalidIndex() { $this->throwExceptionOnInvalidIndex = false; return $this; } /** * @return bool whether an exception is thrown or null is returned when reading a non-existing index */ public function isExceptionOnInvalidIndexEnabled() { return $this->throwExceptionOnInvalidIndex; } /** * Enables exceptions when reading a non-existing property. * * This has no influence on writing non-existing indices with PropertyAccessorInterface::setValue() * which are always created on-the-fly. * * @return $this */ public function enableExceptionOnInvalidPropertyPath() { $this->throwExceptionOnInvalidPropertyPath = true; return $this; } /** * Disables exceptions when reading a non-existing index. * * Instead, null is returned when calling PropertyAccessorInterface::getValue() on a non-existing index. * * @return $this */ public function disableExceptionOnInvalidPropertyPath() { $this->throwExceptionOnInvalidPropertyPath = false; return $this; } /** * @return bool whether an exception is thrown or null is returned when reading a non-existing property */ public function isExceptionOnInvalidPropertyPath() { return $this->throwExceptionOnInvalidPropertyPath; } /** * Sets a cache system. * * @return PropertyAccessorBuilder The builder object */ public function setCacheItemPool(CacheItemPoolInterface $cacheItemPool = null) { $this->cacheItemPool = $cacheItemPool; return $this; } /** * Gets the used cache system. * * @return CacheItemPoolInterface|null */ public function getCacheItemPool() { return $this->cacheItemPool; } /** * @return $this */ public function setReadInfoExtractor(?PropertyReadInfoExtractorInterface $readInfoExtractor) { $this->readInfoExtractor = $readInfoExtractor; return $this; } public function getReadInfoExtractor(): ?PropertyReadInfoExtractorInterface { return $this->readInfoExtractor; } /** * @return $this */ public function setWriteInfoExtractor(?PropertyWriteInfoExtractorInterface $writeInfoExtractor) { $this->writeInfoExtractor = $writeInfoExtractor; return $this; } public function getWriteInfoExtractor(): ?PropertyWriteInfoExtractorInterface { return $this->writeInfoExtractor; } /** * Builds and returns a new PropertyAccessor object. * * @return PropertyAccessorInterface The built PropertyAccessor */ public function getPropertyAccessor() { return new PropertyAccessor($this->magicMethods, $this->throwExceptionOnInvalidIndex, $this->cacheItemPool, $this->throwExceptionOnInvalidPropertyPath, $this->readInfoExtractor, $this->writeInfoExtractor); } } __halt_compiler();----SIGNATURE:----KIMb4NKK8h2xpZpUdsr5ZBec8mzHTLgGZkBjJe+EuZS2VFb5G/+OUoaUfSCWuTbo3FBrwrwQVXydU0n6eMQEUp8QsQULgUi6C+3EBU39cw7B8U4QcAp8WXRXSvnMfhp489LlGNtuuMtc+oOPm8siGOB6NipOMAdtub21r9Cr0IyFp66GVw9oxEKDN+sFczWRUR4AJWBrZDyMhxoBJiAFG4NNBz1+ENq06Zpj3q6XH/wv5Uf+ooUGWtHTYyQVeKNIpoq+KsXD1HDJTINBXI2y2eX9J/HMIYBdBShe5iklgpUEiZexA8QXj115R7Srlj8HmDOn0lpFGaS37vU8XvUQTIrPfJXv44b2YqAYbwe4gN6cWCupGDZZHCNKXA9+ktDVMgAqfhiHOfycW4YZWQ/HN37NTtPFDa5Hpg+/o2Io4UoM1HAgx+eX3BIv36kDVK5sP+PptOstpq4U27r+L7oQ1iriTp+ngSguTtP7vsLaFKGzg8V301D1rhP9xI7TDla3kM89i64HrrjEigrcuzNvRW574yTOJgTs+gLOmIvBuuqMWaueDVKMBzK76IOl5U69qKEGd06epdMeoVPBAyQwEqT2mDPsvKgcWLlOHPdFvs3cUS+PIU1sHltoUl4Gz4AZsT94yw/Ms5ZGO4KZX6GOJPA00JtUWZELi8Vdocz76K0=----ATTACHMENT:----NTM3OTg3MTM3MTIyMzQyMiAzNjMxODg0MDczMzgwNDAgMTY1MDY4MzI2NzE4NjAxNA==