* * 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:----BR+14si3CFegegEgHoxgSmHdD6lUuPt+eDsBF2kdQ7ZSOwNZRwKuTz4bkg3Nc66Em8oRNsRMIETduMqdhxZnwwPDjGoBe72SKIkKCQpqTwsIsksutJnHaS/rMjQgr9FH4pn8bE/jSfRSoVSLLrihDcxc6VubbmGuzdBxsTT7FO1wLquWMTo66o2ChMX2DAZQAZm8EbVmas+RrsBULDQ1wo5l1dHfH3GcwgBU9GODHkn0SpTDgVzvS7ghMHOTnLz91hpMdHdyfuK4J9KQLzGlt3nFn+RZEjGryp5cf78/T8O766SUUKUZP2YsCPbCJ6AWKCG5eq2F7HTQ47H7kqaEXV5O498t5eQZi+sXZEbN3tSkaDxNq9XMZMR813/NPcRl3J3ARuJQtzJluwKktxLV8jBtSut5IEWgPw3NbAjngdYFs1rf0ldMTOX/f2VsLolaJT17OH/+W3cM4S9ESwxb4nR89WkyvFattlvxhRdHE8pjr36qqAFHO9tY6ZvLR62a+hiqE5get+QcgHoOPQKnLsS+U59olVeSSt8DuueyWhChCKbYmsqPmDIL1G2g8cCgaLUNF0/iC6PohdC/DcnGyzRAqqfZD3R5JUZSlFKpmQ3du3YKGblNuK5ioVzXVrqGBGxpssz4G53AJmst4Y0PMVgQoEUZt2+iCC3OpjzU2YQ=----ATTACHMENT:----NzAyODYyMjIzNDE2NTc5IDY1MjU1NzkxNDQxNDQyOTQgMjUxNTExMTAwMzU0ODc1Ng==