Hi!
Also ich verwende durchaus Models, und zwar habe ich eine Klasse namens Model die die Grundmodelfunktionen besitzt und automatisch die erbenden Models mit Datenbankanbindung versorgt. Sie wird an alle Models vererbt, und damit vererbt sie auch die Datenbankinstanz an ihre Kindklassen, was ja durchaus erwünscht ist.
Man muss kein Geschäft erben, um darin einkaufen zu können. Mir scheint, du solltest weiter abstrahieren. So kann man es machen: Die DBMS-Klasse stellt alle datenbankspezifischen Aktionen bereit (RUDI/CRUD), ohne dass irgendwer anderes die konkreten DBMS-Ressourcen zu sehen bekommt. Darauf sitzt eine Schicht, die nicht erbt sondern Funktionen der DBMS-Klasse aufruft, um die Statements abarbeiten zu lassen, die für bestimmte Daten(verarbeitung) notwendig sind. Das kann bereits das Model sein. Je nach Größe des Projekts kann aber auch das Model erst eine weitere Schicht oben drüber sein.
Jetzt habe ich aber das Problem, dass ich genau an einer Stelle, nämlich an der, wo bei der Installation die MySQL-Daten getestet werden sollen, die Datenbankverbindung nicht automatisch hergestellt werden soll, sondern ich dies selber mit meiner Funktion $db->conn() machen möchte. Dafür brauche ich eine Instanz $db der Datenbankklasse im Controller.
Lazy connect. Die DBMS-Klasse fordert erst dann eine geöffnete Verbindung an, wenn sie die wirklich benötigt und nicht auf Vorrat im Konstruktor oder ähnliches. Das heißt, jede Methode, die konkret Querys absetzt, holt sich über ein interenes Singleton die Verbindung. Alle anderen lassen das bleiben, und die Verbindung bleibt nicht vorhanden. Irgendwelche Schichten oben drüber sollen sich nicht um solche "niederen Arbeiten" kümmern müssen/dürfen.
Lo!