ebiz-webhosting
- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-08-2004, 13:09
JamieWolf
 Newbie
Links : Onlinestatus : JamieWolf ist offline
Registriert seit: Feb 2003
Beiträge: 36
JamieWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard [OOP] In einer Klasse eine andere Klasse verwenden?

Hallo alle zusammen,

ich zerbrech mir jetzt schon seit Wochen den Kopf darüber wie ich die Methoden der Klasse db in die Klasse test bekomme.

Also nochmal etwas genauer:
Ich habe eine Klasse db, die eine Verbindung zur Datenbank herstellt und die abfrage functionen enthält, die ganze Klasse befindet sich in der datei "class.datenbank.php".
Die Klasse db besitz einen Konstructor, der da alles regelt wie's sein soll

So nun habe ich noch eine 2te Klasse, namens "test".
In dieser Klasse brauche ich nun einmal die Function sql_query().

Doch nun mein Problem, wie bekomme ich die Methode der Klasse "db" in die Klasse "test".

Muß ich in der Klasse Test nochmal die DB Klasse aufrufen?
Oder kann man durch die verwendung global die schon in der Index.php initalisierte Klasse DB in die Klasse Test einbinden??

Oder gibt es irgendeine Superfunction, die in der lage ist das zu bewerkstelligen?


Muß dazusagen, dass dies mein 4ter Versuch ist mit Klassen ist. 2mal gings bis jetzt, aber da konnte ich dieses Problem noch elegant umgehen, diesmal klappt das leider nicht
Oder ist es vielleicht Sinnvoller die Klasse Test zu eliminieren und die ganzen Funktionen in eine Datei zu packen?


Hoffe ihr versteht mein Prob und es kann mir da jemand helfen, denn ich will auch mal so gut wie ihr in PHP werden

Grüßle
Jamie Wolf
Mit Zitat antworten
  #2 (permalink)  
Alt 26-08-2004, 13:13
MaxP0W3R
 PHP Senior
Links : Onlinestatus : MaxP0W3R ist offline
Registriert seit: Dec 2003
Ort: Ludwigshafen
Beiträge: 1.809
MaxP0W3R ist zur Zeit noch ein unbeschriebenes Blatt
Standard

du kannst in der Klasse Test jede Funktion eines bereits instanzierten (schreibt man das so ?) Objekts benutzen, genau so wie auch sonst...


Und mischen würde ich es nicht, DB-Funktionen bleiben schön in der DB-Klasse und die test-funktionen bleiben "unter sich"
__________________


An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )
Mit Zitat antworten
  #3 (permalink)  
Alt 26-08-2004, 13:27
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Da gibt es grundsätzlich zwei Ansätze (die halbwegs Sinn machen):

1. Per global einbinden (wie du's gesagt hast). Die wohl unsauberste Methode, weil sie das ganze OOP-Konzept kaputt machen würde. Die Klasse wäre dann nämlich von äußeren Einflüssen abhängig.

2. Eine Property in der Test-Klasse erstellen, die eine Instanz der DB-Klasse hält. Der kannst du dann das Objekt im Konstruktor zuweisen.
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

Geändert von Nezzar (26-08-2004 um 13:34 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 26-08-2004, 13:33
antman
 Member
Links : Onlinestatus : antman ist offline
Registriert seit: Jun 2004
Beiträge: 451
antman ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
2. Eine Property in der Klasse erstellen, die eine Instanz der DB-Klasse hält. Der kannst du dann das Objekt im Konstruktor zuweisen.
Warum kann der Konstruktor das DB nicht einfach selber erzeugen ?
Oder widerspricht das auch dem OOP Konzept ? Warum das DB Objekt außerhalb der KLasse erzeugen und dem Konstruktor übergeben ?

Vielleicht braucht doch jedes Skript sowieso die DB Funktionen?

Aber aus Sicht der Wiederverwendbarkeit ? Hmmm ...
Mit Zitat antworten
  #5 (permalink)  
Alt 26-08-2004, 13:35
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Durch das übergeben kann man umgehen, dass das Objekt durch kein zweites Mal instanziert wird (das könnte zwar beabsichtigt sein, ist es hier aber vermutlich nicht).
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #6 (permalink)  
Alt 26-08-2004, 13:45
antman
 Member
Links : Onlinestatus : antman ist offline
Registriert seit: Jun 2004
Beiträge: 451
antman ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also sollte ein Objekt nie ein anderes erzeugen ?
Mit Zitat antworten
  #7 (permalink)  
Alt 26-08-2004, 13:47
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Doch. Klar dürfen die das, es ging mir nur darum zu vermeiden, dass das Objekt mehrmals erzeugt wird (was, wie gesagt, hier vermutlich nicht beabsichtigt ist).
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #8 (permalink)  
Alt 26-08-2004, 13:49
antman
 Member
Links : Onlinestatus : antman ist offline
Registriert seit: Jun 2004
Beiträge: 451
antman ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Aber gibt es einen Vorteil?

Warum sollte ein Objekt ein anderes Objekt erzeugen und nicht jedes benötigte vom "Hauptprogramm" bekommen, oder in Java von der main Methode erzeugten Objekten ?
Mit Zitat antworten
  #9 (permalink)  
Alt 26-08-2004, 13:51
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von antman
Aber gibt es einen Vorteil?

Warum sollte ein Objekt ein anderes Objekt erzeugen und nicht jedes benötigte vom "Hauptprogramm" bekommen, oder in Java von der main Methode erzeugten Objekten ?
Es spart Speicherplatz?

Wenn ich die Funktionalität einer Klasse nur unter bestimmten Umständen brauche, dann erzeuge ich ein Objekt dieser Klasse nur dann, wenn eben diese Umstände eingetreten sind und wenn ich fertig bin entferne ich das Objekt wieder aus dem Speicher
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #10 (permalink)  
Alt 26-08-2004, 13:57
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von antman
Aber gibt es einen Vorteil?

Warum sollte ein Objekt ein anderes Objekt erzeugen und nicht jedes benötigte vom "Hauptprogramm" bekommen, oder in Java von der main Methode erzeugten Objekten ?
Das tut es doch. Der Konstruktor der Testklasse erhält eine Referenz auf das vom Hauptprogramm erzeugte Objekt und kann diese dann weiterverwenden. Wie mrhappiness schon sagte, es spart eben Speicher.
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #11 (permalink)  
Alt 26-08-2004, 14:10
JamieWolf
 Newbie
Links : Onlinestatus : JamieWolf ist offline
Registriert seit: Feb 2003
Beiträge: 36
JamieWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm euere Anworten scheinen mir alle logisch Doch hat es bei mir bis jetzt noch nicht so ganz *klack* gemacht wie ich das nu in "schönem" PHP COde aus drücke.

Ich hatte mir folgende ausführung des Scripts überlegt:[list=1][*]index.php -> include der Klasse DB; include der Klasse Test[*]$db = new DB("localhost", "root", "password", "datenbank");[*]$test = new TEST();[/list=1]
So damit sind die Klassen initialisiert und ich kann sie verwenden.
  • Ein paar abfragen mit der Klasse TEST, und da wird jetzt bei $test->irgendwas(); die methode sql_query gebraucht
  • Nun wieder normal code mit ein paar datenbank abfragen
  • Noch nen bissel aus TEST (ohne SQL oder mit, is ja egal)
  • Ende

Wie müßte ich dass in der Klasse TEST schreiben wenn ich die Methode sql_query aus DB verwenden will?


Danke schonmal an die Poster
Mit Zitat antworten
  #12 (permalink)  
Alt 26-08-2004, 14:11
antman
 Member
Links : Onlinestatus : antman ist offline
Registriert seit: Jun 2004
Beiträge: 451
antman ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von mrhappiness
Es spart Speicherplatz?

Wenn ich die Funktionalität einer Klasse nur unter bestimmten Umständen brauche, dann erzeuge ich ein Objekt dieser Klasse nur dann, wenn eben diese Umstände eingetreten sind und wenn ich fertig bin entferne ich das Objekt wieder aus dem Speicher
Ja eben, wo gibt es denn dann einen Speicherplatzunterschied ?

Wenn ich im Hauptprogramm die DB Klasse erzeuge und diese an den Konstruktor der Testklasse übergebe. Habe ich 2 Objekte im Speicher.

Wenn ich im Hauptprogramm die Klasse Test erzeuge und die Klasse Test instanziert in seinem Konstruktor die DB Klasse habe ich wieder 2 Objekt im Speicher.

Wo hat man bitte Speicherplatz gespart ?
Mit Zitat antworten
  #13 (permalink)  
Alt 26-08-2004, 14:19
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.621
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

@JamieWolf

schaue mal hier ...
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #14 (permalink)  
Alt 26-08-2004, 14:19
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

In dem man Referenzen benutzt.
PHP-Code:
class Test
{
  var 
$db;

  function 
test(&$db)
  {
    
$this->db = &$db;
  }

PHP-Code:
//die includes hier

$db = new DB();
$test = new Test($db); 
Edit: Mist, Abraxax war schneller
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #15 (permalink)  
Alt 26-08-2004, 14:20
JamieWolf
 Newbie
Links : Onlinestatus : JamieWolf ist offline
Registriert seit: Feb 2003
Beiträge: 36
JamieWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Wenn ich im Hauptprogramm die Klasse Test erzeuge und die Klasse Test instanziert in seinem Konstruktor die DB Klasse habe ich wieder 2 Objekt im Speicher.
Ganz einfach, die DB klasse brauche ich ja nicht nur in der Klasse TEST, sondern auch wo anders.
Wie man in meinem Post über deinem sehen kann

Und der Mehr verbrauch an Speicher ist einfach da dass wenn DB schon existiert es nochmal zu erzeugen in TEST
Also hab ich dann kurzfristig zumindestens 3 Objekte im Speicher. Nun rechne mal hoch, wenn 100 User online sind und die gleiche Seite abfragen, dann hast du 100 Objekte mehr im Speicher (2 * 100 - 3 * 100 = 100 ) und je nach dem wie groß diese Objekte sind kann es da schon zu erheblichen Speichereinbußen kommen.

Bin zwar noch a bissel a Noob, aber dass schnall selbst ich
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
belbit LiveSupport Script ansehen belbit LiveSupport Script

Schnellen und unkomplizierten Support im LiveSupport-Chat anbieten. Ohne Datenbank und in wenigen Sekunden installiert.

24.05.2012 EichbaumMedia | Kategorie: PHP/ Chat
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:40 Uhr.