Viewing file: RuntimeReflectionProperty.php (1.92 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
declare(strict_types=1);
namespace Doctrine\Persistence\Reflection;
use Doctrine\Common\Proxy\Proxy as CommonProxy; use Doctrine\Persistence\Proxy; use ReflectionProperty; use ReturnTypeWillChange;
use function ltrim; use function method_exists;
/** * PHP Runtime Reflection Property. * * Avoids triggering lazy loading if the provided object * is a {@see \Doctrine\Persistence\Proxy}. */ class RuntimeReflectionProperty extends ReflectionProperty { /** @var string */ private $key;
public function __construct(string $class, string $name) { parent::__construct($class, $name);
$this->key = $this->isPrivate() ? "\0" . ltrim($class, '\\') . "\0" . $name : ($this->isProtected() ? "\0*\0" . $name : $name); }
/** * {@inheritDoc} * * @return mixed */ #[ReturnTypeWillChange] public function getValue($object = null) { if ($object === null) { return parent::getValue($object); }
return ((array) $object)[$this->key] ?? null; }
/** * {@inheritDoc} * * @param object|null $object * @param mixed $value * * @return void */ #[ReturnTypeWillChange] public function setValue($object, $value = null) { if (! ($object instanceof Proxy && ! $object->__isInitialized())) { parent::setValue($object, $value);
return; }
if ($object instanceof CommonProxy) { $originalInitializer = $object->__getInitializer(); $object->__setInitializer(null);
parent::setValue($object, $value);
$object->__setInitializer($originalInitializer);
return; }
if (! method_exists($object, '__setInitialized')) { return; }
$object->__setInitialized(true);
parent::setValue($object, $value);
$object->__setInitialized(false); } }
|