schaue dir mal die beiden letzten postings an. die sind dir wohl bei deiner antwort zeitgleich entstanden....
[OOP] In einer Klasse eine andere Klasse verwenden?
Einklappen
X
-
INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
-
Jo sind sie
Aber mein letztes Post war auch als Antwort für antman gedacht
Aber danke Jungs,
ich finde sowas sollte irgendwo auf dieser Seite auch als Tutoiral zu finden sein, denn ich denke mal ich bin nicht der einzigste mit diesem Prob.
Greetz JamieWolfNicht jeder der viele Posts hat weiß auch viel
Kommentar
-
ein tut?
ich habe den o.g. thread mit der suchfunktion in ~20sec gefunden ...INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Original geschrieben von JamieWolf
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
Also ich denke wir reden hier total aneinander vorbei.
Ich meinte damit nicht das Objekt in der Test Klasse nochmal zu erzeugen. Sondern dass das eine das andere auschließt.
Natürlich brauch man nicht 2 mal new db();
Ich meine das generell . Vielleicht brauch ich im Hauptskript nicht die DB Klasse aber in einem anderen Skript.
Jetzt verstanden ?Pickel ? Übergewicht ? Depressionen ?
Brot, Kartoffeln und Milch sind Gift!
http://www.paleofood.de
Kommentar
-
Hm, wo ist denn eigentlich das problem ?
Wieso geht das nicht so ?
new db();
new test();
class test
{
....
function braucht_db_funktion()
{
$ergebnis = $db->funktion();
}
Oder hab ich da was falsch verstanden ?
Kommentar
-
es geht um: "wie kommt $db in die funktion?"
entweder per global
oder per referenz
oder per instanziieren in der funktion
global: scheiße und unsauber
referenz: wenn $db auch an anderenstellen verwendet wird, z. b. im hauptskript
instanziieren: wenn $db nur in der funktion verwendet wirdIch denke, also bin ich. - Einige sind trotzdem...
Kommentar
-
Original geschrieben von JamieWolf
@Abraxas
nach was hast du gesucht, denn ich hab mich 20min rumgequält ohne diesen Thread zu finden
ich habe nach init( gesucht ...INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Was hat ein Objekt innerhalb eines anderen Objekts verloren ?
Wenn ich es nur innerhalb einer Klasse brauch, dann kann ich es doch auch in der Klasse selbst anlegen und dann einer vorbereiteten Variable geben:
class test {
var $obj;
function test()
{
$obj = new db();
}
}
Global isses doch nicht "unsauber", sondern entspricht der OOP-Programmeriung:
Objekte sind im Speicher, die Daten und Funktionen jeweils gekapselt.
Soll ein Objekt auf das andere zugreifen, schickt man sich Botschaften (aufrufen der Memberfunktionen), und "vereinnahmt" das andere objekt doch nicht ?
Oder bin ich jetzt völlig verblödet 0_o
cya max
Kommentar
-
Original geschrieben von MaxP0W3R
Oder bin ich jetzt völlig verblödet 0_oINFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Also, nochmal anderes. Jetzt ist mir eine bessere Erklärung eingefallen.
Klassen dienen doch dazu wiederverwertbaren Code zu schreiben.
Wenn ich aber nun im Hauptskript gar nicht das DB Objekt benötige sondern nur in der Testklasse, wäre ja eigentlich angebracht, das DB Objekt im Konstruktor zu instantieren.
Was ist aber nun wenn ich die Testklasse in einem anderen Projekt wiederverwenden will ? Ich meine wenn ich das DB Objekt ja im Konstruktor der Test Klasse erzeuge ist das kein wiederverwertbarer Code mehr. Denn dann muss ich ja vorher den Pfad inkludieren. Bei größeren Projekten weiß man dann nicht mehr welche anderen Datein noch mitnehmen muss, wenn man eine Klasse wiederverwenden möchte.
Ist ein bischen schwer zu erklären. Wurde mein (Verständinis)-Problem
verstanden ?
Man kann ja in UML verdeutlichen, welche Klasse welche andere kennt.
Wie ist das zu verstehen. Wenn ich nun eine Klasse pro Datei habe. Heißt das dann, dass es so geschrieben werden muss ?
require ("../andereklasse.php.");
class Klassenname {
}
Mal ein Beispiel. Angenommen in einem Projekt Bäckerei gibt es die Klassen Abrechnung, Bäcker, Brötchen, Brot & Warenkorb.
Bäcker ist das einzige Objekt das mit der Klasse Brot etwas anfangen kann. Sollte man im Konstruktor von Bäcker dann das Objekt Brot erzeugen, weil es vom Bäcker immer benötigt wird?
Oder besser im Hauptskript, das auch "Bäcker" instantiert ?
OK, in diesem Fall ist es vielleicht offensichtlicher, aber manchmal weiß man ja nicht, ob man eine Klasse evtl. in Zukunft wiederverwenden wird.Pickel ? Übergewicht ? Depressionen ?
Brot, Kartoffeln und Milch sind Gift!
http://www.paleofood.de
Kommentar
-
Jetz habe ich verstanden.
Um es nach meinem OOP-verständnis her zu lösen machst du das so:
Objekt Bäckergrundform, Brot, Kuchen, Torte
Jeweils als klasse schreiben
für dein Projekt machst du eine Klasse Bäcker, die ALLE funktionen von Bächergrundform übernimmt und zusätzlich implementierst du funktionen und var um mit dem Objekt Brot umzugehen.
Genau das selbe für torten:
anderes projekt, Bäcker soll nur Torten machen:
Klasse Bäckergrundform ableiten und mit den Funktionen erweitern, die mit der Torte umgehen.
Bäckergrundform enthält nur Funktionen und Variablen, die wirklich zum reinen Bäcker gehören, z.B. öffne_backofen(), stelle_temperatur_ein() usw
Und für den spezialfall leitest du den bäcker in der grundform ab und erweiterst ihn, und wenn nötig überschreibst du einige Funktionen mit neuen Funktionen für den Spezialfall (geht das schon in PHP 5 ? )
So, und nur so, ist eine Klasse wiederverwendbar, alles andere wäre ja schon zu speziell
cya max
Kommentar
-
Original geschrieben von JamieWolf
darauf wäre ích nie gekommen, nach init( zu suchen ....INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Original geschrieben von mrhappiness
es geht um: "wie kommt $db in die funktion?"
entweder per global
oder per referenz
oder per instanziieren in der funktion
global: scheiße und unsauber
referenz: wenn $db auch an anderenstellen verwendet wird, z. b. im hauptskript
instanziieren: wenn $db nur in der funktion verwendet wird
Du meinst mit Funktion Konstruktor? Denn darum geht es ja.
Ist das DB Objekt ein fester Member von Test ? Dann könnte man den ja im Konstruktor von Test erzeugen, wenn es im hauptskript nicht verwendet wird. Wie ist es aber dann, wenn ich Test in einem anderen Webprojekt wiederverwenden möchte aber nicht mit einer mysql DB sondern postgres. Das ist die Klasse schon mal Müll. OK, das könnte man noch abändern, aber bei größeren Projekten wäre das doch zu viel Aufwand.Pickel ? Übergewicht ? Depressionen ?
Brot, Kartoffeln und Milch sind Gift!
http://www.paleofood.de
Kommentar
Kommentar