Hey dedlfix!
Variante 2:
foobar("Klassenname", array("publicvar1"=>$string1, "publicvar2"=>$string2), $wichtig1, $wichtig2);
Wenn dir positionierte Parameter reichen, dann kannst du die Keys aus dem Array weglassen - jedenfalls für meinen Lösungsvorschlag.
Die Keys hätten den Vorteil, dass ich vorbelegte Parameter nicht beachten müsste wenn ein Konstruktor z.B. so aussähe:
public function __construct($foo, $bar = null, $foobar = false){/* .. */}
Ich würde also $foobar setzen können ohne, dass ich $bar übergeben muss.
Den Satz versteht man wohl nur richtig, wenn man den Aufbau der Klassen kennt. Wenn deine Funktion das Objekt erzeugt, muss sie entweder die Parameter an den Konstruktor übergeben oder sie nach der Instantiierung setzen. Letzteres macht sich nicht gut, wenn dabei private Eigenschaften oder Berechnungen, die der Konstruktor ausführen sollte, im Spiel sind.
Die Klassen sind im Moment noch ziemlich "roh". Es gibt noch keine interne Logik.
Deren Aufbau orientiert sich dann an dem Ergebnis der Diskussion hier^^
Problemen mit dem Konstruktor oder privaten Eigenschaften könnte ich also vorbeugen.
$instance = (new ReflectionClass($klassenname))->newInstanceArgs($parameterArray);
Wie du deine Parameter ins Array bekommst, kannst du nach deinem Geschmack lösen. Bei Variante 2 (ohne Keys) gehts es direkt, bei der ersten mit zwei (Extra-)Funktionsaufrufen.
Der Ansatz sieht auch sehr gut aus. Allerdings wieder mit dem Nachteil, dass ich vorbelegte Parameter beachten muss. Vermutlich ist mein "Problem" allgemein eine "Geschmacksfrage"?
Ich danke dir erstmal für den Denkanstoß! Ich werde mal schauen welche Lösung "für mich" am besten funktioniert. Am Ende muss ich halt die Vor- und Nachteile abwiegen.
Dank dir!