2010-08-30 25 views
11

Gibt es mit PHP eine Funktion/Methode/Möglichkeit zu überprüfen, ob eine Variable etwas enthält, das sicher in ein foreach Konstrukt eingefügt werden könnte? So etwas wieGibt es eine Möglichkeit, eine Variable für "isForEachable" zu testen?

//the simple case, would probably never use it this bluntly 
function foo($things) 
{ 
    if(isForEachable($things)) 
    { 
     foreach($things as $thing) 
     { 
      $thing->doSomething(); 
     } 
    } 
    else 
    { 
     throw new Exception("Can't foreach over variable"); 
    } 
} 

Wenn Ihre Antwort „setup ein Handler den PHP-Fehler abzufangen“, Ihre Bemühungen sind willkommen, aber ich bin für etwas anderes suchen.

+1

Verwandte: http://stackoverflow.com/questions/3584700/iterable-objects-and-array-type- Hinting/ – quantumSoup

Antwort

15

Nun, irgendwie. Sie tun können:

if (is_array($var) || ($var instanceof Traversable)) { 
    //... 
} 

Dies schließt jedoch nicht garantieren, dass die foreach Schleife erfolgreich sein wird. Es kann eine Ausnahme auslösen oder im Hintergrund fehlschlagen. Der Grund dafür ist, dass einige iterierbare Objekte irgendwann keine Informationen mehr liefern können (zum Beispiel wurden sie bereits iteriert und es macht nur Sinn, sie einmal zu iterieren).

Siehe Traversable. Arrays sind keine Objekte und können daher keine solche Schnittstelle implementieren (sie sind älter als diese), aber sie können in einer foreach Schleife durchlaufen werden.

+0

z.B. DOMNodeList ist auch ein Objekt mit einer eigenen Methode, aber seltsamerweise ist es foreach kompatibel und es ist! Is_array (...). – thevikas

+0

Beachten Sie, dass auch Objekte foreachable sind, daher sollten Sie '|| hinzufügen is_object ($ var) 'zu der Bedingung. – jchook

-2

Prüfung mit is_array

if(is_array($things)) 
     echo "it is foreachable"; 
else 
     echo "Not it's not foreachable."; 
+0

Sie können Objekte auch foreach – Galen

+0

Die 'foreach' Schleife unterstützt viel mehr als Arrays. – Artefacto

+0

Danke, dass du das geklärt hast. Entschuldigung, mein Schlechter. Ich verwende PHP OOP nicht viel. – shamittomar

0

Da alle Objekte und Arrays sind "foreachable" in PHP 5 + ...

function is_foreachable($var) { 
    return is_array($var) || is_object($var); 
} 
Verwandte Themen