<?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也是不好的。
我可以做什么而不是上面的例子?
提前谢谢! :)
答案 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);