vendor/doctrine/persistence/src/Persistence/Reflection/RuntimeReflectionProperty.php line 21

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Doctrine\Persistence\Reflection;
  4. use Doctrine\Common\Proxy\Proxy as CommonProxy;
  5. use Doctrine\Persistence\Proxy;
  6. use ReflectionProperty;
  7. use ReturnTypeWillChange;
  8. use function ltrim;
  9. use function method_exists;
  10. /**
  11.  * PHP Runtime Reflection Property.
  12.  *
  13.  * Avoids triggering lazy loading if the provided object
  14.  * is a {@see \Doctrine\Persistence\Proxy}.
  15.  */
  16. class RuntimeReflectionProperty extends ReflectionProperty
  17. {
  18.     /** @var string */
  19.     private $key;
  20.     public function __construct(string $classstring $name)
  21.     {
  22.         parent::__construct($class$name);
  23.         $this->key $this->isPrivate() ? "\0" ltrim($class'\\') . "\0" $name : ($this->isProtected() ? "\0*\0" $name $name);
  24.     }
  25.     /**
  26.      * {@inheritDoc}
  27.      *
  28.      * @return mixed
  29.      */
  30.     #[ReturnTypeWillChange]
  31.     public function getValue($object null)
  32.     {
  33.         if ($object === null) {
  34.             return parent::getValue($object);
  35.         }
  36.         return ((array) $object)[$this->key] ?? null;
  37.     }
  38.     /**
  39.      * {@inheritDoc}
  40.      *
  41.      * @param object|null $object
  42.      * @param mixed       $value
  43.      *
  44.      * @return void
  45.      */
  46.     #[ReturnTypeWillChange]
  47.     public function setValue($object$value null)
  48.     {
  49.         if (! ($object instanceof Proxy && ! $object->__isInitialized())) {
  50.             parent::setValue($object$value);
  51.             return;
  52.         }
  53.         if ($object instanceof CommonProxy) {
  54.             $originalInitializer $object->__getInitializer();
  55.             $object->__setInitializer(null);
  56.             parent::setValue($object$value);
  57.             $object->__setInitializer($originalInitializer);
  58.             return;
  59.         }
  60.         if (! method_exists($object'__setInitialized')) {
  61.             return;
  62.         }
  63.         $object->__setInitialized(true);
  64.         parent::setValue($object$value);
  65.         $object->__setInitialized(false);
  66.     }
  67. }