Hey!
Also ich übergebe einer Funktion nacheinandere mehrere verschiedene Objekte mit verschiedenen Konstruktoren. Ausserdem erhält die Funktion 2 weitere Parameter die immer benötigt werden.
foobar(new Object1($int, $string1), $wichtig1, $wichtig2);
foobar(new Object2($string1, $string2, $string3, $object), $wichtig1, $wichtig2);
Jetzt ist es aber so, dass in der Funktion anhand der 2 letzten Parameter eine Unterscheidung getroffen wird ob das Objekt aus dem ersten Parameter überhaupt benötigt wird. Das Objekt ist zu dem Zeitpunkt aber schon instanziert und das gefällt mir nicht.
Deshalb möchte ich der Funktion foobar($object, $wichtig1, $wichtig2) gern das Instanzieren der Objekte überlassen. Mein Problem ist jetzt, dass ich mir nicht sicher bin, wie ich die Parameter zu den Konstruktoren am elegantesten übergebe.
Ich habe über 2 Varianten nachgedacht.
Variante 1: foobar("Klassenname", $objectparam1, $objectparam2 /* , $objectparam3, ... */, $wichtig1, $wichtig2);
Dann würde ich in foobar() alle Parameter auswerten, die letzten beiden zur Fallunterscheidung nehmen, den ersten zur Instanzierung des Objekts und alles dazwischen in der Reihenfolge als Parameter übergeben.
Dabei gefällt mir aber nicht, dass ich umständlich die Anzahl der Parameter von foobar() ermitteln und zuordnen muss und, dass die Reihenfolge der Parameter nicht flexibel ist.
Variante 2: foobar("Klassenname", array("publicvar1"=>$string1, "publicvar2"=>$string2), $wichtig1, $wichtig2);
In dem Fall würde ich die Unterscheidung ganz sicher anhand des dritten und vierten Parameters treffen können. func_get_args() und die Verarbeitung kann ich mir sparen.
Das schöne daran ist, dass ich die Eigenschaften der Klassen direkt mit übergeben kann anstatt im Konstruktor die Zuordnung z.b. $this->publicvar1 = $string1;
vornehmen zu müssen.
Ich tendiere stark zur zweiten Variante aber ich würde gern wissen ob es noch eine bessere Möglichkeit gibt.
Danke schonmal!