Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Util; Chris@0: Chris@0: use Doctrine\Common\Persistence\Proxy; Chris@0: Chris@0: /** Chris@0: * Class and reflection related functionality for objects that Chris@0: * might or not be proxy objects at the moment. Chris@0: * Chris@0: * @author Benjamin Eberlei Chris@0: * @author Johannes Schmitt Chris@0: */ Chris@0: class ClassUtils Chris@0: { Chris@0: /** Chris@0: * Gets the real class name of a class name that could be a proxy. Chris@0: * Chris@0: * @param string $class Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function getRealClass($class) Chris@0: { Chris@0: if (false === $pos = strrpos($class, '\\'.Proxy::MARKER.'\\')) { Chris@0: return $class; Chris@0: } Chris@0: Chris@0: return substr($class, $pos + Proxy::MARKER_LENGTH + 2); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the real class name of an object (even if its a proxy). Chris@0: * Chris@0: * @param object $object Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function getClass($object) Chris@0: { Chris@0: return self::getRealClass(get_class($object)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the real parent class name of a class or object. Chris@0: * Chris@0: * @param string $className Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function getParentClass($className) Chris@0: { Chris@0: return get_parent_class( self::getRealClass( $className ) ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Creates a new reflection class. Chris@0: * Chris@0: * @param string $class Chris@0: * Chris@0: * @return \ReflectionClass Chris@0: */ Chris@0: public static function newReflectionClass($class) Chris@0: { Chris@0: return new \ReflectionClass( self::getRealClass( $class ) ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Creates a new reflection object. Chris@0: * Chris@0: * @param object $object Chris@0: * Chris@0: * @return \ReflectionObject Chris@0: */ Chris@0: public static function newReflectionObject($object) Chris@0: { Chris@0: return self::newReflectionClass( self::getClass( $object ) ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Given a class name and a proxy namespace returns the proxy name. Chris@0: * Chris@0: * @param string $className Chris@0: * @param string $proxyNamespace Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function generateProxyClassName($className, $proxyNamespace) Chris@0: { Chris@0: return rtrim($proxyNamespace, '\\') . '\\'.Proxy::MARKER.'\\' . ltrim($className, '\\'); Chris@0: } Chris@0: }