Hallo zusammen,
es tut mir Leid, habe jedoch Probleme mit den Datenbankzugriffen etc.
Wie veranstaltet Ihr das, dass Ihr überall in jeder Klasse zu jeder Zeit ein Datenbankzugriff habt? Ich gebe im Konstruktor immer ein Input mit ($test = new mysli(...)). Sehe das als sehr sehr schlecht Lösung. Wie macht Ihr das? Bin ratlos.
Ankündigung
Einklappen
Keine Ankündigung bisher.
[Erledigt] OOP Datenbankzugriffe
Einklappen
Neue Werbung 2019
Einklappen
X
-
[Erledigt] OOP Datenbankzugriffe
Stichworte: -
-
Das ist auch eine gute Möglichkeit das ganze zu lösen, damit sind alle Abhängigkeiten nicht mehr in der Klasse, sondern beim Erzeugen der Objekte
-
Eine gute Alternative wäre vielleicht, wenigstens Registry oder Singleton wo möglich mit dem Konstruktorprinzip zu verbinden.
Also statt
PHP-Code:class myClass
{
function __construct ()
{
$this->db = Registry::get ('globalDB'); // Abhängigkeit
}
function myFunc ()
{
$this->db->query (..);
return ($this->db->getResults ());
}
}
$myObject = new myClass;
$myObject->myFunc ();
PHP-Code:class myClass
{
function __construct (myDatabase $db)
{
$this->db = $db;
}
function myFunc ()
{
$this->db->query (..);
return ($this->db->getResults ());
}
}
$myObject = new myClass (Registry::get ('globalDB')); // Abhängigkeit außen!
$myObject->myFunc ();
// oder halt
$myObject = new myClass (myDatabase::getInstance ()); // Singleton-Typ
$myObject->myFunc ();
Einen Kommentar schreiben:
-
Im Prinzip kann kann man dann so eine statische Klasse (eine Klasse, die eben nur statische Mehtoden und Konstanten hat), auch als ein globales Datenarray ansehen, denn im Prinzip ist das nichts anderes...
Ist halt reine Geschmackssache finde ich, ob man es nutzen möchte oder nicht!
Einen Kommentar schreiben:
-
Du kannst drauf zugreifen weil die Methoden get/set statisch sind. Somit kannst du von überall diese Methoden der Klasse aufrufen. Da alles was in der Registry passiert eben statisch ist, kann man so verschiedene Objekte eben an allen Orten im Projekt wieder aufrufen.
Dazu mal wieder: Siehe Manual PHP: Static Keyword - Manual
Einen Kommentar schreiben:
-
Ein Gast antworteteUnd selbst wenn man kein FW einsetzt, muss man ja nicht immer alles komplett neu machen.Sprichwort Refactoring...
Man kann ja Teil für Teil ändern.
Zu meinen Programmieranfängen hab ich mir auch immer wieder gedacht, "neu aufbauen ist sicher schneller, mach dann weniger Fehler, hab ja dazugelernt.." aber dem ist meißt nicht so...
Vorallem wenn man alleine / zu zweit ist, ist refactoring IMHO besser,....
UNd ich versteh noch immer nicht, was gegen meine Möglichkeit spricht, bevor man sich nun AUCH NOCH mit Registry Pattern auseinand setzen muss. Hab ich selten gebraucht und versuche mir auch keine Gedanken drüber zu machen.... Vorallem wenn man noch nicht so fit ist(was Jens ja nicht ist), kann man sich das ja für später aufheben, sonst wird das nie was mit dem CMS und man fängt immer und immer wieder von vorne an und wie er selbst schreibt: es wird nur noch verwirrender
Zitat von Jens P. Beitrag anzeigenDann muss ich ganz am Anfang in der Index etaws in die Registry schrieben wie z.B.:
PHP-Code:$db = new mysqli($user, $host, $pass, $db);
Registry::set('db', $db);
Dazu passend: Inversion of Control | PHP hates me - Der PHP Blog
Einen Kommentar schreiben:
-
Ein Gast antworteteZitat von dennis81 Beitrag anzeigen
PHP-Code:$db = new mysqli($user, $host, $pass, $db);
Registry::set('db', $db);
Einen Kommentar schreiben:
-
Zitat von Jens P. Beitrag anzeigenWürde auch deine nehmen, würde aber auch gerne den Link haben. Am liebsten beidesIch lösche glaube ich nochmal mein komplettes CMS. Muss nochmal von neu Anfangen. Habe viele kleine Fehler gemacht.
Einen Kommentar schreiben:
-
Ein Gast antworteteWürde auch deine nehmen, würde aber auch gerne den Link haben. Am liebsten beidesIch lösche glaube ich nochmal mein komplettes CMS. Muss nochmal von neu Anfangen. Habe viele kleine Fehler gemacht.
Einen Kommentar schreiben:
-
Ich suche gleich ma nen Link raus, wo du dir sowas mal anschauen kannst. kannst aber auch meine haben wenn de magst, ist ja schließlich kein Hexenwerk...
Einen Kommentar schreiben:
-
Ein Gast antworteteZitat von Paul.Schramenko Beitrag anzeigenDann machs einfach in der index.php.
Weißt du wie so eine Registry-Klasse aussieht?
Einen Kommentar schreiben:
-
Dann machs einfach in der index.php.
Weißt du wie so eine Registry-Klasse aussieht?
Einen Kommentar schreiben:
-
Ein Gast antworteteIch habe eine Index. Anhand der Parametern in der URL starte ich dann eine andere Datei.
www.example.de/index.php?site=register
Dieser Link würde die Datei register.php öffnen, die dann auch gleichzeitig die Register.class.php initialisiert und mit der Klasse arbeitet.
Einen Kommentar schreiben:
-
@Jens
Dein Problem kann man auch über das Singleton-Pattern lösen.
Einen Kommentar schreiben:
Einen Kommentar schreiben: