2009-03-21 9 views
0

Ich erhalte einen Fehler und ich habe alles gegoogelt, was mir einfällt, mit kaum Einsichten. Vielleicht kannst du mit frischen Augen helfen.Fehler in Serverprotokollen angezeigt ... Wie höre ich damit auf?

Ich habe eine Funktion, die ein Array von Objekten zurückgibt. Der Code, der diese Funktion aufruft, durchläuft dann dieses Array und macht, was es mit jedem Objekt zu tun hat. Es scheint visuell zu funktionieren, wenn es den HTML-Code ausspuckt, aber die Server-Logs geben immer noch den Fehler "Ungültiges Argument für foreach()" an. Ja, es ist großartig, dass es technisch funktioniert, aber ich möchte nicht, dass dieser Fehler mehr auftaucht. Gedanken?

+0

Können Sie uns bitte einen Code zeigen? Insbesondere, was Sie zurückgeben und wie die Foreach aussieht. – strager

+0

Kein Code ... nicht einmal die Sprache! – vladr

+0

Es ist PHP. Entschuldigung, das scheint eine wichtige Information zu sein, oder? – Iwasakabukiman

Antwort

1

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

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

zu

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

Es sollte alle Situationen abdecken.

Sie können es auch zu einer vollständigen if-Anweisung mit geschweiften Klammern erweitern und dann einen else-Block einschließen, um die Situation zu behandeln, wenn children leer ist, wenn Sie möchten.

1

Sie sagen nicht, welche Sprache Sie verwenden, aber das sieht wie ein PHP-Fehler aus. Wenn ja, schau dir PHP error reporting levels an. Sie sollten die Werte in Ihrer php.ini jedoch wahrscheinlich ändern, damit Sie keine anderen Fehler in Ihren Serverprotokollen ausgeben.

Natürlich möchten Sie herausfinden, warum dieser Fehler unabhängig davon ausgelöst wird.

1

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

Sie müssen überprüfen, dass der Rückgabewert von getChildren() tatsächlich ein Array ist.

Wir können dies aus Ihrem Kontext nicht erkennen, da Sie weder die Konstruktorquelle noch den Code zur Verfügung gestellt haben, der tatsächlich $children erstellt. Wenn das passiert, könnte es einfacher sein, Ihnen zu helfen.

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

Ich würde auch vorschlagen zu überprüfen, ob das Array leer ist, mit empty() oder count() - einige Websites im Netzzustand, dass leere Arrays auch diese Warnung verursachen, aber ich habe keine PHP-Umgebung zu Hause zu testen Das.