以下内容:
我有大约20个型号。这些类扩展了一个基类。此基类包含一个方法,该方法应该能够确定子元素的类名。通常你可以用:
get_called_class();
但在许多情况下,doctrine 2使用ProxyClasses,在这种情况下,get_called_class()函数返回类似的内容:
Proxies\BasePageElementProxy
虽然原始名称是\ Base \ PageElement。任何人都可以告诉我如何找出这个类的名称是什么(没有生成字符串Proxies \ BaseSectionProxy的名称,因为它是脏的,在许多情况下是不可靠的。)
答案 0 :(得分:61)
使用Doctrine类'ClassUtils'
\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
答案 1 :(得分:12)
通过致电获得真实姓名:
$em->getClassMetadata(get_called_class())->name;
然而,这需要对EntityManager的引用。如果您通过实体类执行静态查找程序方法,则无论如何都可以静态/全局访问,例如:
abstract class Record
{
private static $em = null;
static public function setEntityManager($em)
{
self::$em = $em;
}
static public function __callStatic($method, $args)
{
$className = self::$em->getClassMetadata(get_called_class())->name;
return call_user_func_array(array(self::$em->getRepository($className), $method), $args);
}
}