检测对象是否是实体(没有接口)

时间:2014-02-21 10:14:27

标签: symfony doctrine-orm doctrine entity symfony-2.3

例如我有这个实体。

<?php

namespace AcmeDemo\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Test
 *
 * @ORM\Table(name="test")
 * @ORM\Entity
 */
class Test implements IEntity
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
}

那就是界面。

<?php

namespace AcmeDemo\UserBundle\Entity;

interface IEntity
{
    public function getId();
}

然后我可以通过

检查对象
$object = new Test();
if ($object instanceof IEntity) {
    echo 'Yes, its an entity.';
} else {
    echo 'No entity detected!';
}

但如果我没有声明接口,我就无法做到这一点。 并且在每个实体上定义IEntity也是不好的。

我可以做什么而不是上面的例子?

提前谢谢! :)

2 个答案:

答案 0 :(得分:0)

您可以使用学说注释阅读器并搜索&#34;实体&#34;关于班级的注释。

<?php
use Doctrine\Common\Annotations\AnnotationReader;

$annotationReader = new AnnotationReader();

//Get class annotation
$reflectionClass = new ReflectionClass('My\Class');
$classAnnotations = $annotationReader->getClassAnnotations($reflectionClass);

答案 1 :(得分:0)

我不知道你为什么想要检测一个对象是否是一个实体但是假设你正在使用Doctrine,你可以使用以下内容:

$em->getMetadataFactory()->hasMetadataFor('AcmeDemo\UserBundle\Entity\Test')

hasMetadataFor检查Doctrine元数据。如果您想确定它是一个实体,您可以使用以下方法计算它:

$meta = $em->getMetadataFactory()->getMetadataFor('AcmeDemo\UserBundle\Entity\Test');
$em->getMetadataFactory()->isEntity($meta);