php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.10.2010, 23:15  
Neuer Benutzer
 
Registriert seit: 08.10.2010
Beiträge: 9
PHP-Kenntnisse:
Fortgeschritten
SaferServer befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] MySQli, Klassen und Vererbung

Hallo,

ich versuche mich zur Zeit an einem MySQLi und dazu ein paar Klassen zu erstellen. Da ich kein großer Fan von global bin (ist wohl nur faulheit das immer wieder zu schreiben), wollte ich erstmal 2 einfache Klassen schreiben die für mich die Select- und Insert-Befehle übernehmen, dazu vererbe ich erst MySQLi an eine allgemeine eigene Database-Klassen und dann an die Select/Insert-Klassen. Soweit alles kein Problem...

Das eigentlich Problem tritt jetzt bei der Datenbank-Verbindung auf. Vielleicht denke ich einfach nur zu kompliziert oder gehe falsch an die Sache ran, aber ich muss für jede Abfrage zur Zeit eine neue Datenbankverbindung aufbauen.

Ein bisschen Quellcode damit deutlicher wird, was ich meinen:

PHP-Code:
class database extends mysqli
{
    public function 
__construct() 
    {

    
/** .... **/
            
        
parent::__construct($arr['sql_host'], $arr['sql_user'], $arr['sql_password']);

    
/** .... **/ 
PHP-Code:
class select extends database
{
     
    public function 
__construct$arr 
    {
    
        
parent::__construct(); 
Mein eigentliches Problem liegt jetzt dadrin, dass ich ja die MySQLi Klasse als parent nutzen und das verhindert, dass ich die Datenbankverbindung "mitnehmen" kann in den nächsten Aufruf der Klassen. Ich kann $this ja nicht static setzen oder deren Inhalt übernehmen und $this einfach wieder überschreiben. Der Sauberkeit halber möchte ich aber auch nicht das Datenbank-Objekt in eine Variable schreiben um dann nicht immer über $this->sql... darauf zugreifen zu müssen.

ich hoffe ich könnte ausdrücken, was mein Problem ist. Danke schonmal im Vorraus.

mfg
SaferServer ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.10.2010, 23:43  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
ich hoffe ich könnte ausdrücken, was mein Problem ist. Danke schonmal im Vorraus.
Nicht wirklich.
Zitat:
Der Sauberkeit halber möchte ich aber auch nicht das Datenbank-Objekt in eine Variable schreiben
??
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.10.2010, 12:08  
Benutzer
 
Registriert seit: 04.10.2010
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
grenzdebil befindet sich auf einem aufstrebenden Ast
Standard

Kann da nikosch nur zustimmen: "??" Du solltest Dir vielleicht noch ein paar Grundkenntnisse zum Thema OOP / PHP aneignen.

Warum genau willst Du eigentlich MySQLi vererben? Was versprichst Du Dir davon? Warum nicht einfach in der eigenen DB-Klasse die Instanz von MySQLi als Objekt übergeben und die eigenen Methoden darauf zugreifen lassen?
grenzdebil ist offline   Mit Zitat antworten
Alt 09.10.2010, 13:13  
Neuer Benutzer
 
Registriert seit: 08.10.2010
Beiträge: 9
PHP-Kenntnisse:
Fortgeschritten
SaferServer befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

genau das wollte ich ja vermeiden, die Instanz der Klasse zu nutzen. Ich habe ja gesagt, es kann auch nur aus eigener Faulheit sein, aber ich wollte eben die Methoden der MySQLi-Klassen direkt aufrufen können ohne das Objekt der Klasse benutzen zu müssen. Sprich:

PHP-Code:
$this->prepare$sql ); 
statt

PHP-Code:
$this->sql->prepare$sql ); 
Das verspreche ich mir auch davon.

Und da ich vornerein nicht faul war, habe ich irgendwas bei 4 Stunden nach Lösungen gegoogelt. Ohne Erfolg... Und das ist der einzigste Grund, warum ich jetzt dazu diesen Thread eröffnet habe...

Wenn mir jetzt gesagt wird, dass ich auf dem Holzweg bin, es nicht funktionieren kann, kann ich das akzeptieren, aber bitte haltet mich nicht für ein PHP-Noob, weil ich nur ein (jetzt natürlich zwei) Post bisher im Forum habe...

,mfg

Geändert von SaferServer (09.10.2010 um 14:25 Uhr).
SaferServer ist offline   Mit Zitat antworten
Alt 09.10.2010, 13:33  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard

Das ganze erscheint für mich nicht ganz schlüssig: So wie du das lösen willst, wird bei jeder Abfrage eine neue Verbindung aufgebaut und jedes mal müssen erst Server, Benutzer, Passwort und Datenbank angegeben werden.
global ist für das Ganze auch nicht nötig und macht es in keiner Weise besser…

Erstelle doch einfach eine Singleton-Datenbankklasse die genau einmal die Verbindung zur Datenbank aufbaut und die verschiedene Methoden für Abfragen bietet. Eine Alternative wäre hier auch ORM oder ein Query-Builder.
bitsnack ist offline   Mit Zitat antworten
Alt 09.10.2010, 14:19  
Benutzer
 
Registriert seit: 04.10.2010
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
grenzdebil befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
aber bitte haltet mich nicht für ein PHP-Noob, weil ich nur ein (jetzt natürlich zwei) Post bisher im Forum habe...
Postcounts bedeuten garnichts. Ich habe auch nie behauptet, daß Du ein "PHP-Noob" wärst, allerdings hast Du Dich sowohl durch diese Wortwahl als auch durch die Blüte "prepair" ein ganzes Stück selbst geoutet.

Sagt Dir das Schlüsselwort "parent" etwas? Vielleicht solltest Du Dich ja mal damit befassen ... und wie bei Vererbung die Methoden der Elternklasse in die Tochterklasse überführt werden, kannst Du dann auch gleich nochmal nachlesen ...
grenzdebil ist offline   Mit Zitat antworten
Alt 09.10.2010, 18:28  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Sagt Dir das Schlüsselwort "parent" etwas?
Das ist ja der Witz, er benutzt es ja oben.
Zitat:
parent::__construct
Deswegen verstehe ich auch nicht, wo sein Problem liegt. Eine erbende Klasse erbt die Methoden. Wieso sollte man die nicht direkt nutzen können? Vielleicht bist Du kein Noob, aber Fortgeschritten scheint mir Dein OOP-Wissen auch nicht. Schon gar nicht die Fragestellung.

- Konkrete Fragestellung bitte! -
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 09.10.2010, 18:42  
Benutzer
 
Registriert seit: 04.10.2010
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
grenzdebil befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Das ist ja der Witz, er benutzt es ja oben.
Hab ich gesehen. Das war eine seiner Telling Cards.
grenzdebil ist offline   Mit Zitat antworten
Alt 11.10.2010, 08:04  
Neuer Benutzer
 
Registriert seit: 08.10.2010
Beiträge: 9
PHP-Kenntnisse:
Fortgeschritten
SaferServer befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

bitsnack hat so ziemlich genau mein Problem erkannt. Ich muss zum erstellen einer neuen Anfrage jedesmal eine neue Datenbankverbindung aufbauen und das wollte ich vermeiden, ohne dabei die Instanz des MySQLi-Objektes in eine Variable speichern zu wollen.

,mfg


PS: prepair und prepare, ich kenn meine Schwäche in dem Bereich, ich weiss selber nicht warum ich das immer und immer wieder verwechsel.
SaferServer ist offline   Mit Zitat antworten
Alt 11.10.2010, 08:13  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

1 bonuspunkt - wenigstens die Aussprache klingt so ähnlich - auch wenn es das erstere wohl gar nicht gibt ... (repair gibts aber ^^)

zu deinem Problem ... ein kurzes "geht nicht" akzeptierst du wohl nicht ? ..

ist aber in meinen Augen der einzige Weg - entweder du speicherst die Datenbank - Connection in einer private - Variablen der oberen Klasse (class database) - oder du musst wohl damit leben, dass jedesmal ne neue Verbindung erzeugt wird

vielleicht versuchst du es mal mit der Singleton Lösung .. aber VORSICHTIG ...singleton soll eigentlich nicht als Ersatz-Global benutzt werden
eagle275 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klassen in anderen Klassen verfügbar machen Kein Genie PHP Tipps 2010 5 16.01.2010 20:34
[Erledigt] mysqli in Klassen Lollix PHP Tipps 2009 14 12.01.2010 19:51
[Erledigt] Wie Objekte von Klassen zusammenführen total2121 PHP Tipps 2009 6 19.10.2009 14:22
Mehrere Klassen verknüpfen BlackJack01090 Software-Design 9 26.05.2009 20:43
Modulare Programmierung - Klassen nur in Klassen Gültig iXtends Software-Design 6 26.05.2009 15:37
Klassenabhängigkeiten - Vererbung pleq PHP Tipps 2009 1 14.05.2009 14:17
Singleton Model oder Vererbung ? MollocH PHP-Fortgeschrittene 2 10.02.2009 20:32
mysqli als Objekt CC84 PHP-Fortgeschrittene 31 11.05.2006 20:39
Fragen zu Klassen Kein Genie PHP Tipps 2006 3 08.05.2006 11:25
Vererbung von Klassen und Performance ggfan PHP Tipps 2006 5 05.03.2006 12:00
mit html klassen definieren und in php ausgeben PHP-Fortgeschrittene 4 16.01.2006 10:31
[Erledigt] Klassen und Vererbung PHP-Fortgeschrittene 3 19.04.2005 11:50
Klassen PHP Tipps 2005 5 09.04.2005 18:51
Klassen in Klassen verwenden PHP Tipps 2005 5 23.02.2005 14:08

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php klasse vererbung, mysqli verbindung aufbauen, http://www.php.de/php-fortgeschrittene/72659-erledigt-mysqli-klassen-und-vererbung.html, php datenbank klasse mysqli, mysqli klasse aufbau, eigene mysqli klasse, datenbank klasse mysqli, mysqli class, php vererbung datenbank, mysqli klassen php, php mysqli datenbank klasse, php vererbung mysqli, php mysqli vererbung, vererbung php datenbank, mysqli in eigener klasse verwenden, mysqli vererben, php klasse datenbank mysqli, $db vererben php, mysqli in eigener klasse, mysqli instanz in anderer klasse nutzen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum