Problem mit "parent"
Von: Claus Reibenstein (4spamersonly@online.de) [Profil]
Datum: 14.10.2009 13:40
Message-ID: <7jlrljF36ds7nU1@mid.individual.net>
Newsgroup: de.comp.lang.php.misc
Datum: 14.10.2009 13:40
Message-ID: <7jlrljF36ds7nU1@mid.individual.net>
Newsgroup: de.comp.lang.php.misc
Hallo allerseits,
ich habe folgendes PHP-Progrämmchen:
<?php
class a {
function x() {
echo "a -> x aufgerufen.\n";
$this -> y();
}
function y() {
echo "a -> y aufgerufen.\n";
}
}
class b extends a {
function x() {
echo "b -> x aufgerufen.\n";
parent :: x();
}
function y() {
echo "b -> y aufgerufen.\n";
parent :: y();
}
}
$var = new b();
$var -> x();
?>
Beim Starten des Programms erhalte ich diese Ausgabe:
b -> x aufgerufen.
a -> x aufgerufen.
b -> y aufgerufen.
a -> y aufgerufen.
Erwartet hätte ich diese Ausgabe:
b -> x aufgerufen.
a -> x aufgerufen.
a -> y aufgerufen.
Offensichtlich ruft die Methode a->x die Methode b->y auf und nicht
a->y. Aber warum? Wie kann ich dieses Problem lösen? Oder ist das ein Bug?
Aufgefallen ist mir das Ganze im FPDF. Hier habe ich eine eigene Klasse
aus FPDF abgeleitet und nach genau diesem Muster jene Methoden, die
Strings ausgeben (MultiCell, Cell, Write etc.) durch eigene Methoden
überladen, die die übergebenen Strings von UTF8 nach Windows 1252
konvertieren und die konvertierten Strings an die gleichnamigen
parent-Methoden weiterleiten. Leider geht das schief, weil einige der
FPDF-Methoden weitere FPDF-Methoden aufrufen und dabei die überladenen
Methoden meiner Klasse erwischen, die den bereits konvertierten String
abermals konvertieren wollen.
Im Augenblick habe ich mir damit geholfen, dass ich die Methoden der
abgeleiteten Klasse einfach umbenannt habe. Das heißt aber, dass in
meiner abgeleiteten Klasse nun _beide_ Versionen vorhanden sind und ich
folglich beim Programmieren höllisch aufpassen muss, dass ich nicht
versehentlich die falsche Methode aufrufe.
Das kann es irgendwie nicht sein.
Gruß. Claus
[ Auf dieses Posting antworten ]Antworten
- Christoph Herrmann (14.10.2009 14:02)
- Niels Braczek (14.10.2009 15:00)
- Michael Fesser (14.10.2009 20:34)
- Stefan Dreyer (14.10.2009 23:44)
- Claus Reibenstein (15.10.2009 11:20)
- Stefan Dreyer (15.10.2009 15:31)
- Claus Reibenstein (15.10.2009 17:59)
