Klasse nicht 'erreichbar' (PHP4.x)

Tach community,

gehen wir bitte davon aus, dass die folgende codestruktur relativ gottgegeben ist…
d.h.
class und ausgabe in einer datei…
und folgendes soll erreicht werden.
in der klasse sind methoden, die einen link zusammenbauen und codieren.
unten AUSSERHALB der klasse soll der link ausgeben werden. codiert.
meine idee… im link wird die entsprechende methode aufgerufen. aber irgendwie mag mir das nicht gelingen. ist sicherlich nen doofer denkfehler… nachfolgend mein code (schematisch) zum schlachten

**FRAMEWORK.PHP -\>**
===================
class testKlasse{
**function encodeIt** (){
 ... hier wird gebaut,verschluesselt und
 return $link;
 }
**function decodeIt** (){
 ... hier wird gebaut,entschluesselt und
 return $link;
 }

 function init(){ 
 $fw = new testKlasse(); 
 $param = $\_SERVER['QUERY\_STRING']; 
 echo " DECODED = ".$fw-\>buildLink("decode",$param); 
 }


} // Ende Klasse

init(); // Klassenobjekt erzeugen

echo ["\>testLink](%3C?=%2524fw-%3EencodeIt()

ich initiiere doch mit init() ein klassenobjekt. wo ist das objekt denn verfuegbar… nur in der klasse? weil die methode init() in der klasse steht und dort die objekte erzeugt werden? wie gehe ich am besten vor?

objekt global bekannt machen? oder gibts ne moeglichkeit wie ich
auf eine methode in einer klasse von ausserhalb zugreifen kann?
das ganze natuerlich mit PHP 4 :smile:

viiiiieln dank

grusz

PixelKoenig

Hi,

ich initiiere doch mit init() ein klassenobjekt. wo ist das objekt denn
verfuegbar… nur in der klasse? weil die methode init() in der klasse
steht und dort die objekte erzeugt werden? wie gehe ich am besten vor?

so, wie du es gemacht hast, kannst du die Klasse lediglich mit:

$obj =& testKlasse::init();

erzeugen. Hier wird init als statische Methode angesehen, sprich: sie bedarf keiner Objekt-Instanz.

Du musst die Init-Routine ins globale verlegen, also außerhalbn des Klassenrumpfes, um init() auch außerhalb der Klasse als klassen-lose Funktion verwenden zu können, falls es das ist, was du möchtest (und mir kommt es so vor) :wink:

Grüße, Hagen

Tach community,

gehen wir bitte davon aus, dass die folgende codestruktur
relativ gottgegeben ist…
d.h.
class und ausgabe in einer datei…
und folgendes soll erreicht werden.
in der klasse sind methoden, die einen link zusammenbauen und
codieren.
unten AUSSERHALB der klasse soll der link ausgeben werden.
codiert.
meine idee… im link wird die entsprechende methode
aufgerufen. aber irgendwie mag mir das nicht gelingen. ist
sicherlich nen doofer denkfehler… nachfolgend mein code
(schematisch) zum schlachten

FRAMEWORK.PHP ->

class testKlasse{
function encodeIt (){
… hier wird gebaut,verschluesselt und
return $link;
}
function decodeIt (){
… hier wird gebaut,entschluesselt und
return $link;
}

function init(){
$fw = new testKlasse();
$param = $_SERVER[‚QUERY_STRING‘];
echo " DECODED =
".$fw->buildLink(„decode“,$param);
}

} // Ende Klasse

init(); // Klassenobjekt erzeugen

echo ">testLink

ich initiiere doch mit init() ein klassenobjekt. wo ist das
objekt denn verfuegbar… nur in der klasse?

nein, die instanz $fw ist nur gueltig, solange init ausgefuehrt wird.

objekt global bekannt machen? oder gibts ne moeglichkeit wie
ich
auf eine methode in einer klasse von ausserhalb zugreifen
kann?

schwer zu sagen, weil sich der sinn deines codes nicht wirklich erschliesst wozu soll die init gut sein - was wird da initialisert und was macht die funktion builit, die du nicht notiert hast?

deine init sieht mir sehr nach nem denkfehler beruhend auf missverstaendnis aus. eine methode, die eine instanz der eigenen klasse erzeugt und danach verwirft, obwohl keine recursion benoetigt wird? wahrscheinlich wolltest du irgend wo am anfang (ausserhalb der klasse) deine instanz bauen und innerhalb der init auf $this->buildlink verweisen

schau mal unter $this resp. abstract im manual nach.

so, wie du es gemacht hast, kannst du die Klasse lediglich
mit:

$obj =& testKlasse::init();

kannst du mir d o.g. contruct erklaeren?
was mach ich denn mit dem „::“ ?

Du musst die Init-Routine ins globale verlegen, also
außerhalbn des Klassenrumpfes, um init() auch außerhalb der
Klasse als klassen-lose Funktion verwenden zu können, falls es
das ist, was du möchtest (und mir kommt es so vor) :wink:

na… global wollte ich die eignetlich nicht machen…
hmmm…
vielleicht kannst du mir das erstmal mit dem :: erklaren.
bzw. was deine zeile da genau tut…

merci

Pixelkoenig

nein, die instanz $fw ist nur gueltig, solange init
ausgefuehrt wird.

ahja. logisch. :smile:

objekt global bekannt machen? oder gibts ne moeglichkeit wie
ich
auf eine methode in einer klasse von ausserhalb zugreifen
kann?

schwer zu sagen, weil sich der sinn deines codes nicht
wirklich erschliesst wozu soll die init gut sein - was wird da
initialisert und was macht die funktion builit, die du nicht
notiert hast?

builit hab ich hier nicht weiter erwaehnt, weil die fuer mein problemchen nicht so wichtig ist.
init() soll auf der seite alle methoden der klasse bekannt machen,
so dass ich immer drauf zugreifen kann.

deine init sieht mir sehr nach nem denkfehler beruhend auf
missverstaendnis aus. eine methode, die eine instanz der
eigenen klasse erzeugt und danach verwirft, obwohl keine
recursion benoetigt wird? wahrscheinlich wolltest du irgend wo
am anfang (ausserhalb der klasse) deine instanz bauen und
innerhalb der init auf $this->buildlink verweisen

das ist alles nur einklitzekleiner auszug aus 1400 zeilen code.
hintergedanke ist, dass in framework.php insgesamt 4 klassen untergebracht sind…
die initmethode baut jeweils eine instanz, so dass alle klassen
untereinander einfach zu erreichen sind.

ich denke mein fehler war die init() innerhalb der klasse zu platzieren.
das was ich wollte ist ja die klassenmethoden bekanntmachen.

schau mal unter $this resp. abstract im manual nach.

das mach ich glatt :smile:

danke

grusz

PixelKoenig

so, wie du es gemacht hast, kannst du die Klasse lediglich
mit:

$obj =& testKlasse::init();

kannst du mir d o.g. contruct erklaeren?
was mach ich denn mit dem „::“ ?

ruft die Funktion init der Klasse testKlasse als statische Methode auf. Sprich: eine Klassen-Instanz wird an dieser Stelle nicht benötigt. Vorrausgesetzt, deine init-funktion würde mittels Return das mit new erzeugte Objekt zurückgeben, würde sie durch obiges Konstrukt in die Variable obj als Referenz einfließen.

Aber eigentlich ist das Blödsinn. Ein solches Verfahren via init-Funktion eine Klasseninstanz zu erzeugen, das sogenannte Factoring, findet nur in speziellen Gebieten einen glaubhaften Sinn, mit dem ich dich nicht weiter belasten möchte :smile:

Eigentlich brauchst du das nicht.

$obj =& new testKlasse();
$obj->setTelefonNummer($nummer);
$status = $obj->ruf_mich_an();

echo $status;

Obiges Beispiel würde doch völlig ausreichen.

Vielleicht liesst du dir einfach mal das Kapitel über OOP-Programmierung mit php durch, da stehen genug Beispiele, die alle deine bisherigen Fragen erklären.

Du findest es hier:
http://www.php.net/manual/de/language.oop.php

Dies wäre eine Investition in die Zukunft, und keine Zeitverschwendung :smile:

Grüße, Hagen