Tach!
Noch ein Nachtrag zur Entscheidungshilfe assoziatives Array oder Klasse:
Ein assoziatives Array (oder auch ein Dictionary) ist eine lose Sammlung von Key-Value-Paaren ohne konkrete Vorgaben. Da kann man alles reinstopfen unter jedem beliebigen (syntaktisch gültigem) Key. So eine Datenstruktur eigent sich in den Fällen, wenn man nicht weiß, was einen erwartet. Zum Beispiel sind die Querystring- oder Post-Parameter nicht genau definiert. Du wünschst dir zwar bestimmte Werte, aber was der Client letzlich sendet, ist seine Angelegenheit. Deshalb ist ein Array eine guter Container, der erstmal alles aufnimmt und du suchst dir raus, was du brauchst.
In anderen Situationen ist jedoch genau festgelegt, was erwartet wird und der Aufrufer hat keine andere Wahl, als das zu übergeben, weil es sonst einen Syntax- oder anderen Fehler gibt. Das betrifft zum Beispiel die Daten, die eine DB-Klasse braucht, um eine Verbindung zum DBMS aufzubauen. Die können konkret benannt werden und somit steht auch ihre Anzahl fest. Dafür eignet sich eine Klasse mit genau definierten Eigenschaften besser als ein undefiniertes Array. Oder unter Verzicht des Umweges lässt man sich diese Werte eben als Funktionsparameter übergeben.
Das Argument, man könne das übergebene Array mit einem Defaultwerte-Array mergen, ist nicht ganz von der Hand zu weisen. Aber dabei hat man die Nachteile des Arrays mit seinen beliebigen Key-Namen. In den Alternativen stehen die Namen ja fest, und dann kann auch eine IDE oder ein guter Editor mit Sprachenkenntnis behilflich sein beim Aufrufen von Funktionen oder beim Erstellen der Objekte. Der weiß dann ja, welche Parameter oder Eingenschafte existieren, beim Array jedoch nicht. Beim Array musst du selbst darauf achten, die Namen der Keys zu kennen und sie korrekt zu schreiben. Die Sache mit den Default-Werten lässt sich auch einfach lösen:
function __construct($host, $username, $password, $port = 3306, $encoding = 'utf8') { ... }
dedlfix.