2016-01-05 15 views
10

Ich möchte herausfinden, ob eine Variable eine Sammlung ist.Laravel: herausfinden, ob Variable ist Sammlung

Ich kann is_object() nicht verwenden, weil es wahr sein wird, auch wenn es keine Sammlung ist. Vorerst Ich benutze dies, und es funktioniert:

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

Aber ich denke, es ist so hässlich, dass ich Zeit fragen Sie über eine andere Lösung zu verbringen.

Haben Sie eine Idee?

+0

Ich würde es zu einer Hilfsfunktion isCollection() extrahieren und es verwenden, wann immer benötigt. –

+3

Mögliches Duplikat von [Kann ich überprüfen, ob ein Objekt in PHP eine bestimmte Klasse ist?] (Http://stackoverflow.com/questions/1965722/can-i-check-if-an-object-is-kind -of-a-specific-class-in-php) – Bogdan

+1

Mögliches Duplikat von [Wie nach einem bestimmten Objekttyp in PHP gesucht wird] (http://stackoverflow.com/questions/8091143/how-to-check-for -a-specific-type-of-object-in-php) – patricus

Antwort

13

Könnten Sie nicht verwenden

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

Oder

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

} 
+2

'is_a' wurde seit PHP 5.0 veraltet, also ist es nicht der beste Ratschlag. – Bogdan

+0

Seltsam. Es listet es immer noch in PHP 7 auf: http://php.net/manual/en/function.is-a.php Es listet es als veraltet auf. Mein Fehler. –

+3

@Bogdan 'is_a' war in 5.0.0 veraltet, wurde jedoch ab 5.3.0 wieder aktiviert (nicht mehr veraltet). Angesichts der Geschichte, würde ich immer noch "instanceof" über "is_a" empfehlen. Plus, liest es ein wenig besser IMHO. – patricus

4

einfach ein Fehler, den ich lief in auf diese Antwort korrigieren wollte.

Beachten Sie, dass instanceof excepts entweder ein (obj) oder den Namen der Klasse ohne Anführungszeichen

$images instanceof Illuminate\Database\Eloquent\Collection 

Auch Interessanterweise gibt es eine Geschwindigkeit/Leistungsdifferenz instanceof über is_a verwenden, aber dies ist wahrscheinlich nicht relevant ist für Sie, wenn Sie wie ich sind und auf der Suche nach einer Antwort auf diese Frage waren.

+0

funktioniert auch .. wie die Antwort –

5

Die verwendete Klasse ist hier nicht korrekt. In einem allgemeinen Sinn sollten Sie für die Basisklasse testen.

use Illuminate\Support\Collection; 

.... 
if($images instanceof Collection) { 
.... 
} 
+1

Dies ist die einzige richtige Antwort hier. –

Verwandte Themen