Обычно вы можете проверить, является ли переменная экземпляром класса, используя:
$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
но я хотел бы сделать конкретную проверку на этот тип
Чтобы выполнить самоанализ объекта в пространстве имен, класс по-прежнему должен быть включен с использованием 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
Класс реализует оба этих интерфейса.
Других решений пока нет …