Ich möchte eine "Foreach"-Schleife mit einer Variablen verwenden, aber diese Variable kann viele verschiedene Typen haben, zum Beispiel "NULL".
Also teste ich sie vor foreach
:
if(is_array($var)){
foreach($var as ...
Aber ich habe erkannt, dass es auch eine Klasse sein kann, die die Schnittstelle Iterator
implementiert. Vielleicht bin ich blind, aber wie prüft man, ob die Klasse die Schnittstelle implementiert? Gibt es so etwas wie die Funktion is_a
oder den Operator inherits
? Ich habe class_implements
gefunden, ich kann es benutzen, aber vielleicht gibt es etwas einfacheres?
Und zweitens, wichtiger, ich nehme an, dass diese Funktion existiert, wäre genug, um zu prüfen, ob die Variable is_array
oder "implements Iterator
interface" oder sollte ich für etwas mehr testen?
Wenn Sie foreach
innerhalb einer Funktion verwenden und ein Array oder ein Traversable Objekt erwarten, können Sie die Funktion mit angeben:
function myFunction(array $a)
function myFunction(Traversable)
Wenn Sie foreach
nicht innerhalb einer Funktion verwenden oder beides erwarten, können Sie einfach dieses Konstrukt verwenden]1, um zu prüfen, ob Sie über die Variable iterieren können:
if (is_array($a) or ($a instanceof Traversable))
Sie können die Instanz von "Traversable" mit einer einfachen Funktion überprüfen. Dies würde für alle diese von Iterator
funktionieren, weil Iterator extends Traversable
function canLoop($mixed) {
return is_array($mixed) || $mixed instanceof Traversable ? true : false;
}
<?php
$var = new ArrayIterator();
var_dump(is_array($var), ($var instanceof ArrayIterator));
gibt bool(false)
oder bool(true)
zurück