Hi!
Was machen denn diese Variablen und warum können sie nicht Eigenschaften eines Objekts sein?
sie speichern unter Anderem die MySQL-Verbindung und beinhalten das Konfigurationsarray. Und eigentlich könnten sie auch Attribute eines Objektes sein. (dann würde ich aber das gesamte System in einer Klasse realisieren)
Datenbankabfragen brauchst du immer wieder. Deshalb ist es sinnvoll, die grundlegende Infrastruktur dafür wiederverwendbar zu gestalten. Und da sie am Ende Arbeit abnehmen soll, und nicht einfach nur die vorhandenen PHP-Funktionen kapseln soll, so dass man erst wieder 100 Zeilen Code tippen muss, muss sie also mindestens die Verbindung selbständig verwalten können und nicht viel mehr als eine Funktion zum Query-Absetzen und eine zum Maskieren (am besten inklusive Quotieren) von Werten nach außen hin anbieten (zumindest für den Start). Achja, die Connection-Daten muss man auch irgendwie initial übergeben können. Prinzipiell könnte das von außen so aussehen.
class DB {
private static $db;
public static function Init($config_values) { ... }
public static function Query($sql, $values = null) { ... }
public static function Quote($value) { ... }
}
Das private $db ist natürlich nicht sichtbar, aber hier könnte die Instanz von mysqli abgelegt werden, die die anderen Methoden verwenden können.
Theoretisch macht es gar nichts aus, mehrere Objekte der Klasse zu erzeugen. Es macht aber einfach keinen Sinn, da dabei immer das gleiche passiert und zur Verfügung gestellt wird. Damit wären mehrere Instanzen reine Ressourcenverschwendung.
Wenn es nicht stört, dann lass es doch. Du als Autor bist nicht unbedingt schuld, wenn der Verwender es falsch einsetzt. Wenn er unbedingt will, lass ihn doch. Du hast nur mehr Aufwand auf deiner Seite. (Und dass du Autor und Verwender in Personalunion bist, ist auch nebensächlich.)
Schön gepackte Variablen bekommt man durch die OOP, da braucht es noch kein Singleton dazu. Schön gepackt bekommt man auch alles, wenn man funktional programmiert.
Und da weiß ich wieder nicht, wie ich es in PHP schaffen sollte, nur mithilfe von Funktionen die Variablen (MySQL-Verbindung, Konfigurationsarray, ...) nicht jedes Mal bei einem Funktionsaufruf neu erzeugen zu müssen. Da sehe ich keinen Weg, das ohne globale Variablen hinzubekommen.
Das war ja nur mal so ein Beispiel. Aber wenn du dich erinnerst, erwähnte ich, dass man das Singleton-Pattern auch mit einer herkömmlichen Funktion implementieren kann, denn man kann darin statische Variablen anlegen.
Aber gut, lassen wir diese kleine Abschweifung mal links liegen.
Das gibt mir jetzt wirklich zu denken. Es wäre tatsächlich eine gute Idee, das alles zu extrahieren und mehrere Klassen zu machen. Dazu muss ich aber meine Planung intensivieren. Langsam brummt mir der Kopf!
Alltagsweisheiten in Sprüche geklopft haben schon Generationen vor dir und mir: Meister fallen nicht vom Himmel. Erfahrungen sammelt man auch, wenn man erst mal den "falschen" Ansatz implementiert hat. Selbst wenn du dir noch so viel Mühe gibst und am Ende denkst, jetzt war es perfekt, kommst du ein paar Monde später wieder und findest mit inzwischen neu erworbenem Wissen und Erfahrungen, Dinge die verbesserungs- bis wegwerfwürdig sind.
Wenn du dir Perfektionismus als Lebensziel gestellt hast, wirst du dich darauf einstellen müssen, ständig zu scheitern.
Naja, ich will eigentlich schon, dass alles, was ich anpacke super gelingt. Da ich aber motorisch relativ ungeschickt bin, habe ich bei handwerklichen Arbeiten meine Anforderungen schon sehr weit heruntergeschraubt.
Bei Informatik ist mein Ziel schon etwas höher. Da möchte ich eigentlich schon fast die "sich selbst schreibende Programmiersprache".
Die gibts so wenig wie den Do-what-I-mean-Button für Anwender. Programmieren ist nicht selten wie das Rennen von einer Sackgasse in die nächste. Vielleicht fehlt dir beim Handwerklichen nur die nötige Übung. Programmieren benötigt sie auch, nur mehr auf mentaler Ebene.
Mit der Zeit werden deine Antworten für mich leider immer unverständlicher. Allerdings freue ich mich, dass du mir trotzdem noch versuchst, alles zu erklären. Vermutlich fehlt mir einfach das nötige Vorwissen.
Scheu dich nicht nachzufragen, ich finde dann sicher eine noch unverständlichere Erklärung.
Lo!