代码之家  ›  专栏  ›  技术社区  ›  Rene Terstegen

原则2获取代理类的真实类名

  •  11
  • Rene Terstegen  · 技术社区  · 16 年前

    以下内容:

    我大约有20个型号。这些类扩展基类。这个基类包含一个方法,该方法应该能够确定子元素的类名。通常,您可以使用:

    get_called_class();
    

    但在许多情况下,Doctine 2使用代理类,在这种情况下,get_called_class()函数会返回如下内容:

    Proxies\BasePageElementProxy
    

    而原始名称是\Base\PageElement。有谁能告诉我如何找出这个类的名称(不从字符串proxy\BaseSectionProxy生成名称,因为这是脏的,在许多情况下不可靠)。

    2 回复  |  直到 14 年前
        1
  •  12
  •   beberlei    16 年前

    您可以通过拨打以下电话获得真实姓名:

    $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);
        }
    }
    
        2
  •  62
  •   Paul-Emile MINY    13 年前

    使用条令类'ClassUtils'

    \Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
    
    推荐文章