Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Persistence\Mapping; Chris@0: Chris@0: use Doctrine\Common\Reflection\RuntimePublicReflectionProperty; Chris@0: use ReflectionClass; Chris@0: use ReflectionException; Chris@0: use ReflectionMethod; Chris@0: use ReflectionProperty; Chris@0: Chris@0: /** Chris@0: * PHP Runtime Reflection Service. Chris@0: * Chris@0: * @author Benjamin Eberlei Chris@0: */ Chris@0: class RuntimeReflectionService implements ReflectionService Chris@0: { Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getParentClasses($class) Chris@0: { Chris@0: if ( ! class_exists($class)) { Chris@0: throw MappingException::nonExistingClass($class); Chris@0: } Chris@0: Chris@0: return class_parents($class); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getClassShortName($class) Chris@0: { Chris@0: $reflectionClass = new ReflectionClass($class); Chris@0: Chris@0: return $reflectionClass->getShortName(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getClassNamespace($class) Chris@0: { Chris@0: $reflectionClass = new ReflectionClass($class); Chris@0: Chris@0: return $reflectionClass->getNamespaceName(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getClass($class) Chris@0: { Chris@0: return new ReflectionClass($class); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function getAccessibleProperty($class, $property) Chris@0: { Chris@0: $reflectionProperty = new ReflectionProperty($class, $property); Chris@0: Chris@0: if ($reflectionProperty->isPublic()) { Chris@0: $reflectionProperty = new RuntimePublicReflectionProperty($class, $property); Chris@0: } Chris@0: Chris@0: $reflectionProperty->setAccessible(true); Chris@0: Chris@0: return $reflectionProperty; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritDoc} Chris@0: */ Chris@0: public function hasPublicMethod($class, $method) Chris@0: { Chris@0: try { Chris@0: $reflectionMethod = new ReflectionMethod($class, $method); Chris@0: } catch (ReflectionException $e) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: return $reflectionMethod->isPublic(); Chris@0: } Chris@0: }