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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #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
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.625
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

Von 0 auf über 2 Mio € Umsatz in weniger als 12 Monaten – wie die Pixelwerker das nur durch SEO geschafft haben
Von 0 auf über 2 Mio € Umsatz in weniger als 12 Monaten – wie die Pixelwerker das nur durch SEO geschafft habenSEO oder SEA? Warum SEO die besserer Methode ist.

01.10.2021 | Berni

Kundengewinnung und Kundenbindung
Kundengewinnung und KundenbindungVertrieb läuft doch immer persönlich. Das funktioniert nicht mit dem Internet! Wirklich?

24.09.2021 | Berni


 

Aktuelle PHP Scripte

PHP Newsletter Script SuperWebMailer ansehen PHP Newsletter Script SuperWebMailer

Die webbasierte PHP Newsletter Software SuperWebMailer ist die optimale Lösung zur Durchführung eines erfolgreichen E-Mail-Marketings. Zur Nutzung des PHP Script-Pakets ist eine eigene Webpräsenz/Server mit PHP 5 oder neuer, MySQL 4 oder neuer und die

28.10.2021 mirko_swm | Kategorie: PHP/ Mail
Guestbook Light ansehen Guestbook Light

Das Guestbook Light (kurz: "Gblight") ist ein kinderleichtes Gästebuch in PHP. Durch den Einsatz einer SQLite Datenbank ist es einfach, leicht portabel und schnell. Aufgrund moderner Techniken erfüllt Gblight auch die neuesten Webstandards.

28.10.2021 scripthostingnet | Kategorie: PHP/ Gaestebuch
AdRotator Light ansehen AdRotator Light

AdRotator Light (kurz: "Arlight") ist ein kostenloser und spielend einfach zu bedienender AdServer in PHP.

18.10.2021 scripthostingnet | Kategorie: PHP/ Bannerverwaltung
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:07 Uhr.