Sven Rautenberg: Invalid argument supplied for foreach()

Beitrag lesen

Moin!

ich programmieren gerade ein einfaches threadbasiertes Forum.

Und das machst du in meinen Augen gar nicht gut.

Hauptkritikpunkt an deinem sichtbaren Code ist: Du mischst Darstellung (in Form von HTML-Codefragmenten, die darüber hinaus noch mit Inline-CSS verseucht sind) und Datenhaltung.

Wenn ich mein bislang gesammeltes OOP-Wissen zum Besten geben darf: Erstelle eine Klasse, die ein Posting darstellt. Erstelle eine Klasse, die einen ganzen Threadbaum aus Postings darstellt. Und erstelle eine Klasse, der du ein Threadobjekt übergibst, und die daraus eine HTML-Ausgabe macht - templatebasiert, wenn's geht.

Anforderungsabhängig gibts da ja durchaus auch Varianten, die Ausgabe mit einem Standardinterface zu betreiben, die konkrete Umsetzung (HTML, Text, RSS, Atom etc.) aber durch eine Factory kontextabhängig zu realisieren.

Ansonsten:

/* HIER KOMMT DIE WARNUNG */
            foreach( $this->getChildren( $mid ) as $child ) {
                $this->drawThread( $child );
            }

Offenbar willst du von der Methode $this->getChildren() ein Array zurückerhalten.  
  
Wo passiert das denn?  
  

> ~~~php
  

>     private function getChildren( $mid ) {  
>         $children = array();  
>         $RE_getMessageRelation = "/[0-9]{8}t[0-9]+m([0-9])+rel[0-9]+m[0-9]+/";  
>         $RE_getRelated = "/[0-9]{8}t[0-9]+m[0-9]+rel[0-9]+m([0-9])+/";  
>         preg_match( $RE_getMessageRelation, $mid, $messageNumber );  
>         foreach( $this->getPostings() as $mid => $posting ) {  
>             preg_match( $RE_getRelated, $mid, $relationNumber );  
>             if( ( $relationNumber && $messageNumber ) ) {  
>                 if( $relationNumber[1] == $messageNumber[1] ) {  
>                     $children[$mid] = $posting;  
>                 }  
>             }  
>         }  
>     }

Ein return habe ich in dem Code jedenfalls nicht gefunden.

Abgesehen davon halte ich es für extrem schlecht programmiert, bei jedem Aufruf eines Threads massenhaft RegEx zu durchlaufen. Wie andernorts schon erwähnt: Speicher deine Postings in einer GEEIGNETEN Struktur. Ein eindimensionales, durch Textschlüssel verdrahtetes Array ist keine geeignete Struktur für einen Threadbaum.

- Sven Rautenberg

--
"Love your nation - respect the others."