supportsTypedPropertiesWorkaround = version_compare(phpversion(), '7.4.0') >= 0; } /** * {@inheritDoc} */ public function getParentClasses(string $class) { if (! class_exists($class)) { throw MappingException::nonExistingClass($class); } $parents = class_parents($class); assert($parents !== false); return $parents; } /** * {@inheritDoc} */ public function getClassShortName(string $class) { $reflectionClass = new ReflectionClass($class); return $reflectionClass->getShortName(); } /** * {@inheritDoc} */ public function getClassNamespace(string $class) { $reflectionClass = new ReflectionClass($class); return $reflectionClass->getNamespaceName(); } /** * @psalm-param class-string $class * * @return ReflectionClass * @psalm-return ReflectionClass * * @template T of object */ public function getClass(string $class) { return new ReflectionClass($class); } /** * {@inheritDoc} */ public function getAccessibleProperty(string $class, string $property) { $reflectionProperty = new RuntimeReflectionProperty($class, $property); if ($this->supportsTypedPropertiesWorkaround && ! array_key_exists($property, $this->getClass($class)->getDefaultProperties())) { $reflectionProperty = new TypedNoDefaultReflectionProperty($class, $property); } $reflectionProperty->setAccessible(true); return $reflectionProperty; } /** * {@inheritDoc} */ public function hasPublicMethod(string $class, string $method) { try { $reflectionMethod = new ReflectionMethod($class, $method); } catch (ReflectionException $e) { return false; } return $reflectionMethod->isPublic(); } }