检查某些东西是否是ArrayCollection的一个实例

时间:2014-11-13 14:11:09

标签: php symfony doctrine-orm instanceof

通常,您可以使用以下方法检查变量是否是类的实例:

$foo instanceof bar

但是在ArrayObjects(属于Symfony 2)的情况下,这似乎不起作用

get_class($foo)返回'Doctrine\Common\Collections\ArrayCollection'

$foo instanceof ArrayCollection

返回false

is_array($foo)返回false$is_object($foo)返回true

但我想对此类型进行特定检查

1 个答案:

答案 0 :(得分:13)

要对命名空间下的对象进行内省,仍然需要使用use指令包含该类。

use Doctrine\Common\Collections\ArrayCollection;

if ($foo instanceof ArrayCollection) {

}

if ($foo instanceof \Doctrine\Common\Collections\ArrayCollection) {

}

关于尝试确定对象用作is_array($foo)的数组。

该功能仅适用于array类型。但是,要检查它是否可以用作数组,您可以使用:

/*
 * If you need to access elements of the array by index or association
 */
if (is_array($foo) || $foo instanceof \ArrayAccess) {

}

/*
 * If you intend to loop over the array
 */
if (is_array($foo) || $foo instanceof \Traversable) {

}

/*
 * For both of the above to access by index and iterate
 */
if (is_array($foo) || ($foo instanceof \ArrayAccess && $foo instanceof \Traversable)) {

}

ArrayCollection类实现了这两个接口。