Frage

Ich erhalte eine Fehlermeldung, und ich habe alles googeln ich mit kaum irgendwelchen Einsichten denken. Vielleicht können Sie mit einem frischen Satz Augen helfen.

Ich habe eine Funktion, die ein Array von Objekten zurückgibt. Der Code, der diese Funktion ruft dann eine Schleife durch dieses Array und das tut, was es mit jedem Objekt tun muss. Es scheint, visuell zu arbeiten, wenn sie die HTML spucken, aber die Server-Logs noch eine Fehlermeldung „Invalid argument für foreach () geliefert“ geben. Ja, es ist toll, dass es technisch funktioniert, aber ich möchte nicht, diese Fehler nicht mehr aufzutauchen. Gedanken?

<?php

// The class whose method returns an array of library_Label objects
class library_Label
{
  public $id = null;
  public $name = null;

  public function getChildren()
  {
    // $children is declared earlier
    return $children;
  }
}


// main code
$columns = new library_Label(1);
foreach ($columns->getChildren() as $label) echo $label->Name;

?>
War es hilfreich?

Lösung

Das ist ziemlich häufig, meine Lösung ist immer, dies zu ändern:

foreach ($columns->getChildren() as $label) echo $label->Name;

$children = $columns->getChildren();
if (is_array($children)) foreach ($children as $label) echo $label->Name;

Es sollte alle Situationen abdecken.

Sie können es zu einem vollständigen erweitern if-Anweisung mit Klammern als auch und dann einen anderen Block enthalten, die Situation zu handhaben, wenn Kinder leer sind, wenn Sie wollen.

Andere Tipps

Sie sagen nicht, welche Sprache Sie verwenden, aber das sieht aus wie ein PHP-Fehler. Wenn ja, Besuche PHP Fehlerberichtsebenen . Sie sollten wahrscheinlich die Werte tatsächlich in der php.ini ändern, obwohl, so dass Sie Fehler in Ihre Server-Logs nicht auskippen.

Natürlich, werden Sie wollen herausfinden, warum diese Fehler unabhängig geworfen wird.

Die Warnung "Invalid argument supplied for foreach()" passiert, wenn Sie versuchen, eine foreach auf eine Variable zu tun, die kein Array ist.

Sie müssen prüfen, ob der Rückgabewert von getChildren() eigentlich ein Array.

Wir können das nicht von Ihrem Kontext sagen, da Sie weder die Konstruktor Quelle noch den Code zur Verfügung gestellt haben, die tatsächlich $children schafft. Wenn die bevorstehenden, könnte es einfacher sein, um Ihnen zu helfen.

Eine Sache, die Sie könnten versuchen, druckt den Rückgabewert, bevor die foreach, mit "print_r($columns->getChildren())" ausführt. Dies sollte klarer Hinweis darauf sein, ob es sich um ein Array ist oder nicht.

Ich würde auch zu sehen, die Überprüfung vorschlagen, wenn das Array leer ist, mit empty() oder count() - einigen Seiten im Netz Zustand, dass leere Arrays wird auch diese Warnung verursachen, aber ich habe keine PHP-Umgebung zu Hause zu testen, dass .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top