Проверьте, является ли что-то экземпляром ArrayCollection

Обычно вы можете проверить, является ли переменная экземпляром класса, используя:

$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

но я хотел бы сделать конкретную проверку на этот тип

5

Решение

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

13

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]