通常,您可以使用以下方法检查变量是否是类的实例:
$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
但我想对此类型进行特定检查
答案 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
类实现了这两个接口。