123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?php
- namespace Doctrine\Persistence\Mapping;
- use Doctrine\Persistence\Reflection\RuntimePublicReflectionProperty;
- use Doctrine\Persistence\Reflection\TypedNoDefaultReflectionProperty;
- use ReflectionClass;
- use ReflectionException;
- use ReflectionMethod;
- use ReflectionProperty;
- use function array_key_exists;
- use function class_exists;
- use function class_parents;
- use function phpversion;
- use function version_compare;
- /**
- * PHP Runtime Reflection Service.
- */
- class RuntimeReflectionService implements ReflectionService
- {
- /** @var bool */
- private $supportsTypedPropertiesWorkaround;
- public function __construct()
- {
- $this->supportsTypedPropertiesWorkaround = version_compare((string) phpversion(), '7.4.0') >= 0;
- }
- /**
- * {@inheritDoc}
- */
- public function getParentClasses($class)
- {
- if (! class_exists($class)) {
- throw MappingException::nonExistingClass($class);
- }
- return class_parents($class);
- }
- /**
- * {@inheritDoc}
- */
- public function getClassShortName($class)
- {
- $reflectionClass = new ReflectionClass($class);
- return $reflectionClass->getShortName();
- }
- /**
- * {@inheritDoc}
- */
- public function getClassNamespace($class)
- {
- $reflectionClass = new ReflectionClass($class);
- return $reflectionClass->getNamespaceName();
- }
- /**
- * {@inheritDoc}
- */
- public function getClass($class)
- {
- return new ReflectionClass($class);
- }
- /**
- * {@inheritDoc}
- */
- public function getAccessibleProperty($class, $property)
- {
- $reflectionProperty = new ReflectionProperty($class, $property);
- if ($reflectionProperty->isPublic()) {
- $reflectionProperty = new RuntimePublicReflectionProperty($class, $property);
- } elseif ($this->supportsTypedPropertiesWorkaround && ! array_key_exists($property, $this->getClass($class)->getDefaultProperties())) {
- $reflectionProperty = new TypedNoDefaultReflectionProperty($class, $property);
- }
- $reflectionProperty->setAccessible(true);
- return $reflectionProperty;
- }
- /**
- * {@inheritDoc}
- */
- public function hasPublicMethod($class, $method)
- {
- try {
- $reflectionMethod = new ReflectionMethod($class, $method);
- } catch (ReflectionException $e) {
- return false;
- }
- return $reflectionMethod->isPublic();
- }
- }
|