Hallo Sven,
Folgendes aktuelles Beispiel möchte ich nehmen: eine Klasse "Foto". Ein Foto hat etwa folgende Eigenschaften:
Und welche Methoden?
Z.B. resize(), paintImgMap(), getHtmlRepresentation() was auch immer man mit Fotos machen kann...
Wie kommt das Foto denn an?
Per method="post" enctype="multipart/form-data".
Ich würde dann den Konstruktur von NEWFOTO aufrufen: und zwar ohne Parameterübergabe (_construct())!
Der Konstruktor schaut dann in den POST_VARS nach, ob er in der Lage ist, ein neues Foto zu erzeugen (dazu braucht er u.a. ein Bild im tmp-Verzeichnis). Dann erfolgt der DB-Eintrag und das Speichern des Fotos mit der neuen DB-ID.
Klingt so, als solltest du nur eine einzige Klasse haben, und in der eine Methode (z.B. als Konstruktor oder Factory, oder simple Methode), die ein Bild ggf. auch als Upload entgegennehmen, passend ablegen und dann alle Eigenschaften initialisieren kann.
Das ist das, was auch dedlfix vorschlägt ("KISS"). Nur habe ich dann natürlich doch eine ganze Menge zusätzlichen Code in der normalen Foto-Klasse, den ich niemals wieder für ein existierendes Foto brauche. Eigentlich nicht so schoen :-/
Ich meine, ich könnte auch in der NEWFOTO-Klasse eine Methode bereitstellen: getExistingFoto(), die mein UploadManager dann aufruft. Das sähe dann also im UploadManager so aus:
$outputHtml = '';
$newFoto = new NEWFOTO(); // versucht, ein Foto aus den post-Parametern zu erzeugen
if ($newFoto->isValid())
{
$finalFoto = $newFoto->getExistingFoto(); // erzeugt ein EXISTINGFOTO mit selber ID und gibt es zurück
$outputHtml = $finalFoto->getHtmlRepresentation();
}
else
{
$outputHtml = $newFoto->getError();
}
echo $outputHtml;
Aber auch das ist nicht wirklich elegant :-/
Eddie
Old men and far travelers may lie with authority.