Autor |
Nachricht |
Account gelöscht
Threadersteller
Ort: -
Alter: -
|
Verfasst Mo 16.08.2004 23:33
Titel [PHP] ungewollte Objekthexerei |
|
|
So. Voller Wut habe ich einen Fehler nach drei Tagen zeilenweises rumprobieren bis
an seinen Ursprung zurückverfolgen können. Vielleicht ist mein Brett vor dem Kopf
mittlerweile so dick, dass ich hier einen Stolperstein eingebaut hab', der mir im Grab
noch peinlich sein wird. ES SIEHT ABER AUS WIE EIN VERF... BUG.
Folgendes Szenario: Ich habe einen Templateparser, der vereinfacht XML-Templates nach
bestimmten Tags abgrast. Beim Auffinden wird mittels einer Callback-Funktion eine gleichnamige
Methode der Parserklasse aufgerufen, ganz einfach mittels:
Code: |
private function gsCallBack() {
// }}}
// {{{ gs-tag initiierung
/**
* Übergabe des containers an entsprechende
* Callback-Funktionen für gstag-Definitionen
*/
$methodName=str_replace(":","_", $this->container[0]["tag"]);
if (method_exists($this, $methodName)) {
call_user_func(array(&$this,$methodName));
}
else {
echo "<h2 style='color:red'>".$methodName.": ";
echo "Funktionsaufruf fehlgeschlagen!</h2>";
}
}
|
man kann sehen, dass ich - nachdem ich merkte, worans lag, eine kleine abfrage eingebaut,
die folgendes liefert, wenn die besagte methode einer kindklasse der parserklasse
angehört (bspw.: class news extends parser { }:
ABER JETZT KOMMTS:
1) Eine andere Methode anderen Namens wird ohne murren ausgeführt.
2) Setze ich die Methode in die Basisklasse, so wird die ebenfalls ohne murren ausgeführt.
Hat so etwas schonmal jemand erlebt?
ProForma hier die beiden Codeseiten, die werden aber ohne ein wenig
Einarbeitung nicht viel bringen, daher nur die Frage, OB so etwas schon einmal
akut wurde, oder ob ich einfach ein grundsätzliches Detail außer acht gelassen habe!?
basisklasse - kindklasse
|
|
|
|
|
Account gelöscht
Threadersteller
Ort: -
Alter: -
|
Verfasst Di 17.08.2004 00:28
Titel
|
|
|
AARGH!!!!
Bin ich ein Superidiot!!! Kurz vorm Einschlafen wird mir meine geistige Behinderung klar:
Code: |
$className=get_class($this);
$evalStr="\$this->parser=new ".$className."();";
eval($evalStr);
$this->parser->VH=&$this->VH;
$this->parser->gsParseArray($this->container);
$this->output.=$this->parser->output; |
Ich hab einfach vergessen, bei verschachtelten Elemente den richtigen Klassennamen für die Rekursion zu nutzen: Hier stand vorher immer nur der Name der Basisklasse.
Au mann. Da zweifelst du Stunden und Tage an deinem Verstand, und - nach dem du schon resignierst und das Orakel gefragt hast, fällt es dir wie Schuppen aus den Haaren...
trotzdem danke
|
|
|
|
|
Anzeige
|
|
|
Sarky
Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht:
|
Verfasst Di 17.08.2004 00:34
Titel
|
|
|
Schön zu wissen, daß es noch andere Leute gibt die sich die Tage und Nächte damit um die Ohren schlagen irgendeine dämliche Nadel im Heuhaufen zu finden, von der man nicht mal weiß wie sie aussieht...
Ich brüte auch gerade schon wieder über einem komischen Problem... das wird mal wieder eine lange Nacht *seufz*
Zuletzt bearbeitet von Sarky am Di 17.08.2004 03:23, insgesamt 1-mal bearbeitet
|
|
|
|
|
Account gelöscht
Threadersteller
Ort: -
Alter: -
|
Verfasst Di 17.08.2004 00:40
Titel
|
|
|
Poste doch mal, vielleicht bekommt der Thread doch noch nen Sinn
|
|
|
|
|
Sarky
Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht:
|
Verfasst Di 17.08.2004 03:25
Titel
|
|
|
Hat sich erledigt, nach einer erquickenden Runde WarCraft III um den Kopf freizubekommen habe ich die Lösung gefunden.
Da sich Dein Problem auch gelöst hat mache ich hier also mal dicht.
# Thread geschlossen
|
|
|
|
|
|
|
|
Ähnliche Themen |
Ungewollte Banner auf Homepage
Leichter Farbverlauf und ungewollte Farbstufungen
[CSS] ungewollte Umbrüche beim floaten
Giv.-Datei wirft ungewollte Kontur auf der Website !
Ungewollte (Vektor?)Linien beim Druck von Corel-GIF
|
|