Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Funktionen
Hallo
Ich hab grad mit den Klassen angefangen. Nun hab ich das Problem, dass ich eine Funktion in einer Funktion aufrufen muss. Das geht aber nicht. Es kommt immer der Fehler, dass er die Funktion nicht gefunden hat. Irgendwie blick ich da nicht durch, wo liegt das Problem?
class KLASSE
{
function eins()
{
$var1 = "hallo";
return $var;
}
function zwei()
{
$var2 = eins();
}
}
gruss magpie
Hallo!
Jedes Objekt referenziert über die Variable $this auf sich selbst!
Um auf Objekt-Attribute oder Methoden zuzugreifen verwendest du $this->methode() oder $this->attribut.
In deinem Fall hieße dies also:
$var2 = $this->eins();
PS: In der Objektorientierung verwendet man die Bezeichnung "Methode" anstatt "Funktion".
Danke!
Aller Anfang ist schwer :D
Ist es möglich Funktionen in einer Klasse von einer anderen Klasse zu nutzen?
Ich dachte mir das so, dass ich eine Klasse für die MySQL- Verbindungen und Anfragen mach. Diese müsste dann aber von anderen Klassen angesprochen werden können.
Ist das überhaupt möglich oder muss man da Umwege gehen?
magpie
Klar ist das möglich!
Es gibt mehrere Möglichkeiten:
1. Du kannst die Klasse1 mit Klasse2 erweitern:
Klasse1 extends Klasse2
{
}
Dann stehen die Methoden der Ersten klasse auch in der Zweiten zur Verfügung...
Ist für deine Zwecke aber denke ich nicht angebracht!
2. Das erzeugte Objekt der ersten Klasse mithilfe von "global" in eine Methode der Zweitenklasse "reinholen" und dann darauf zugreifen...
-> Schlechte Lösung, da damit der Name des Objekts hart codiert ist!
3. Das erste Objekt als Referenz an das Zweite Objekt übergeben.
-> Meiner Meinung nach die Beste Lösung!
Zum Verständnis von 3. hier ein Beispiel:
<?php
//Erste Klasse
class test1
{
var $text = "Originaltext!";
function gibText()
{
return $this->text;
}
}
//Zweite Klasse
class test2
{
var $test;
function echoText()
{
echo $this->test->gibText();
}
}
//Objekte werden erzeugt
$t1 = new test1;
$t2 = new test2;
//Objekt t1 wird als Referenz (!!!) an t2 übergeben
$t2->test=&$t1;
$t2->echoText();
echo "<br>";
//Hier wird im ersten Objekt der Wert verändert...
$t1->text="HUHU!";
//Ausgabe des neuen Werts, weil wir das Objekt als Referenz übergeben haben!
$t2->echoText();
?>
Am besten du probierst mal ein wenig rum...
Leider ist die Objektorientierung bei PHP ja noch nicht so gut ausgebaut, aber das kommt ja hoffentlich mit Version 5 ...
Viel Spaß beim Experimentieren!
Vielen Dank
ich werd mal rumprobieren. Sieht so aus als wäre es nicht all zu kompliziert ;)
mehlvogel
24-12-2002, 12:57
Original geschrieben von Gaert
-> Schlechte Lösung, da damit der Name des Objekts hart codiert ist!
Was meinst du damit?
Ok... hier ein Beispiel dafür!
Es funktioniert, aber es ist unschön gelöst!
<?php
//Erste Klasse
class test1
{
var $text = "Originaltext!";
function gibText()
{
return $this->text;
}
}
//Zweite Klasse
class test2
{
var $test;
function echoText()
{
global $t1;
echo $t1->gibText();
}
}
//Objekte werden erzeugt
$t1 = new test1;
$t2 = new test2;
$t2->echoText();
echo "<br>";
//Hier wird im ersten Objekt der Wert verändert...
$t1->text="HUHU!";
//Ausgabe des neuen Werts, weil wir das Objekt als Referenz übergeben haben!
$t2->echoText();
?>
Wenn das Erzeugte Objekt nun nicht mehr $t1 ist wird ein Fehler ausgegeben!
Alternativ gäbe es natürlich auch die Möglichkeit den Namen des Objekts z.B. dem Konstruktor zu übergeben:
<?php
//Erste Klasse
class test1
{
var $text = "Originaltext!";
function gibText()
{
return $this->text;
}
}
//Zweite Klasse
class test2
{
var $test;
function test2($objectname)
{
$this->test=$objectname;
}
function echoText()
{
$test=$this->test;
global $$test;
echo $$test->gibText();
}
}
//Objekte werden erzeugt
$t1 = new test1;
//Objektname wird dem Konstruktor übergeben...
$t2 = new test2("t1");
$t2->echoText();
echo "<br>";
//Hier wird im ersten Objekt der Wert verändert...
$t1->text="HUHU!";
//Ausgabe des neuen Werts, weil wir das Objekt als Referenz übergeben haben!
$t2->echoText();
?>
Aber sind wir doch mal ehrlich... die Version von oben mit der Referenz ist doch da viel schöner ;) !
mehlvogel
24-12-2002, 15:26
Wollte nur wissen was du meinst ;)
Referenzen sind theoretisch schöner, ja - ABER (*gggg*) [mein Standardargument] sind in PHP noch langsam. Fragt mich nicht wieso. Ich meine das auf der PHP Homepage gelesen zu haben.
Aber Gaert hast recht - Referenzen sind schöner ;)
Naja... Vielleicht gibts ja noch andere (geschickte) Lösungen!
Ich bin da für alles offen. :D
Dass Referenzen langsam sind kann ich mir irgendwie auch nicht Erklären!
Das würd mich echt mal interessieren.
PS.:
Frohe Weihnacht euch allen!!!
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.