Php 原则2获取代理类的真实类名
以下是: 我大约有20种型号。这些类扩展了基类。这个基类包含一个方法,该方法应该能够确定子元素的类名。通常情况下,您可以使用以下方法:Php 原则2获取代理类的真实类名,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,以下是: 我大约有20种型号。这些类扩展了基类。这个基类包含一个方法,该方法应该能够确定子元素的类名。通常情况下,您可以使用以下方法: get_called_class(); 但在许多情况下,doctrine 2使用ProxyClass,在这种情况下,get_调用的_class()函数会返回如下结果: Proxies\BasePageElementProxy 而原始名称为\Base\PageElement。有谁能告诉我如何找到这个类的名称(而不使用字符串Proxies\BaseSection
get_called_class();
但在许多情况下,doctrine 2使用ProxyClass,在这种情况下,get_调用的_class()函数会返回如下结果:
Proxies\BasePageElementProxy
而原始名称为\Base\PageElement。有谁能告诉我如何找到这个类的名称(而不使用字符串Proxies\BaseSectionProxy生成名称,因为这是肮脏的,在许多情况下是不可靠的)。您可以通过调用:
$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);
}
}
使用原则类“ClassUtils”
\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
非常感谢你!工作起来很有魅力。说到教义,你好像成了我的私人老师+1
\doctor\Common\Util\ClassUtils::getClass($entity)
是更好的解决方案,因为最好的做法是不让实体知道管理器。如果您已经有一个对象,只需使用getClass
:\Common\Util\ClassUtils::getClass($entity)代码>此已弃用,看起来必须更换