Felix Riesterer: Verständnisproblem OOP

Beitrag lesen

Lieber Lukas,

ich glaube ich habe Dein Missverständnis verstanden. Wir reden doch von dieser Klasse? Ein Link zur Heimatseite Deiner Software ist ein nicht zu unterschätzender Hinweis!

$thumb -> Createthumb('bilder/'.$file.'');

Dieser Aufruf erzeugt eine Ausgabe an den Browser. Die Klasse erzeugt (jedes Mal neu - ich empfehle dringend das Ergebnis zu cachen!) eine Bilddatei, ohne sie zu speichern (dazu müsstest Du den String 'file' als zweiten Parameter übertragen). Sie kann auf diese Art in Deinem HTML-Dokument referenziert werden:

<img src="http://example.com/images/thumbnail.php?f=bild1.jpg" alt="" />

Genau hier aber stört sich Deine Programm-Logik: Anstatt einer Bilddatei liefert der Server ein HTML-Dokument aus. Das kann der Browser nicht als Bild darstellen. Offensichtlich grätscht Dir hier aber Deine Klasse dazwischen, da der Methodenaufruf CreateThumb() Bilddaten (für genau ein Bild) an den Browser sendet und dann das PHP-Script mit Gewalt beendet (was nicht unsinnig ist).

Es ist wesentlich sinnvoller, mit diesem PHP-Script einmal(!) die Thumbnail-Dateien zu erstellen (z.B. aus einem Admin-Bereich heraus), um sie dann in Deinem HTML-Dokument (das Du gerne mit PHP zusammenbasteln darfst) zu referenzieren. Du kannst Dein PHP-Script sogar so "schlau" machen, dass es den Bedarf an neu zu erzeugenden Thumbnail-Dateien selbst erkennt, um entsprechend zu handeln (erspart den Admin-Bereich).

Nachfolgender Code zeigt das Thumbnail des ersten Bildes des Verzeichnisses an. Mehr aber nicht.

Wenn der Request des Browsers nach einer Bild-Datei fragt, warum sollte Dein Script dann mehr als eine einzige solche in der Antwort senden?

Kommentiere ich die Thumbnailerstellung aus und lasse den Echobefehl unkommentiert, dann werden hingegen alle Bilder namentlich aufgeführt.

Deine Schleife funktioniert also.

Mir scheint, dass Du kein Problem mit dem Verständnis von OOP hast, sondern mit dem Zusammenspiel zwischen verschiedenen PHP-Ausgaben. Ein PHP-Script kann dem Browser jede beliebige Datei mit jedem beliebigen Typ ausliefern, nicht nur HTML. Im Falle von Bildern mag es ganz bequem sein, Thumbnails nicht selbst erstellen zu müssen, sondern diese dynamisch berechnen zu lassen, man handelt sich damit aber zusätzliche Probleme ein, inklusive dem fehlenden Caching. Wenn ich mit einem PHP-Script (nennen wir es der Einfachheit halber "index.php") ein HTML-Dokument generiere, in dem eine Bilddatei nach obigem Muster defniniert ist, dann benötige ich ein zweites Script, das mir diese Datei (bei Bedarf generiert und) ausgibt. In diesem zweiten Script kannst Du Deine Klasse einsetzen.

Natürlich kann man ein PHP-Script so intelligent basteln, dass es versteht, ob gerade ein HTML-Dokument, oder eine darin referenzierte Datei (und welche!) angefordert wurde, um aus den eben skizzierten zwei Scripts ein einzelnes zu machen. Aber dazu muss man den prinzipiellen Mechanismus verstanden haben, dass das einzelne Script dann mehrfach vom Browser mit unterschiedlichen Anfragen aufgerufen werden kann.

Grundsätzlich könntest Du die Bilddaten auch im HTML-Dokument direkt ausgeben, aber dann verlierst Du den Vorteil des Cachings erneut.

Liebe Grüße,

Felix Riesterer.

--
"Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)