web-dev-qa-db-fra.com

Laravel: savoir si la variable est une collection

Je veux savoir si une variable est une collection.

Je ne peux pas utiliser is_object () car ce sera vrai même si ce n'est pas une collection. Pour l'instant j'utilise ça, et ça marche:

if(is_object($images) && get_class($images) != 'Illuminate\Database\Eloquent\Collection') {

Mais je pense que c'est si moche que je passe du temps à vous demander une autre solution.

Avez-vous une idée?

22
Albert

Ne pourriez-vous pas utiliser

if(is_a($images, 'Illuminate\Database\Eloquent\Collection')) {
    ....do whatever for a collection....
} else {
    ....do whatever for not a collection....
}

Ou

if ($images instanceof Illuminate\Database\Eloquent\Collection) {

}
34
P. Gearman

La classe utilisée est incorrecte ici. Dans un sens général, vous devriez tester la classe de base.

use Illuminate\Support\Collection;

....
if($images instanceof Collection) { 
 ....
}
18
Konchog

Je voulais juste corriger une erreur que j'ai rencontrée sur cette réponse.

Notez que instanceof exclut a (obj) ou le nom de la classe sans guillemets

$images instanceof Illuminate\Database\Eloquent\Collection

De plus, il est intéressant de noter qu'il existe une différence de vitesse/performances en utilisant instanceof sur is_a, mais cela ne vous concerne probablement pas si vous êtes comme moi et que vous cherchiez en premier lieu une réponse à cette question.

3
insitderp