Franz Fuchsbauer: xml_set_element_handler

Hallo!

Ich hab mich gerade mit dem xml parser von PHP beschäftigt. So lange ich das prozedural programmiere, funktioniert das. Wenn ich das ganze aber in ein eine Klasse verpacke, weiß ich nicht, wie ich dem xml_set_element_handler die klasseninterne funktion übergeben soll.

folgendes funktioniert:

function mystarthandler(....){..}
function myendhandler(....){..}
..........
xml_set_element_handler($parser,"mystarthandler", "myendhandler");

funktioniert.

Wie gebe ich die Handlerfunktionen aber an, wenn ich das in eine Klasse verpacke?

class MyParser{

private function mystarthandler(....){..}
private function myendhandler(....){..}

function __construct(){
 $xml_parser = xml_parser_create();
 xml_set_element_handlermyendhandler($xml_parser, "$this->mystarthandler", "$this->myendhandler");

}
}

Das xml_set_element_handler gibt einen Fehler aus:
Undefined property: MyXMLParser::$mystarthandler

Wie definiere ich die Handlerfunktion richtig?

Danke!
  Franz

  1. Ich hab mich gerade mit dem xml parser von PHP beschäftigt. So lange ich das prozedural programmiere, funktioniert das. Wenn ich das ganze aber in ein eine Klasse verpacke, weiß ich nicht, wie ich dem xml_set_element_handler die klasseninterne funktion übergeben soll.

    Im Handbuch zu xml-set-element-handler ist doch dazu ein Beispiel...

    Im Allgemeinen gibt man Methoden an Funktionen die ein Callback machen über ein array.

    für einen statischen Methodenaufruf: array('Klassenname', 'Methode') oder array($klasse, 'Methode')
    für eine bestimmte Instanz einer Klasse: array(&$klasse, 'Methode')
    Beachte das & sonst gibst du eine Kopie und keine Referenz.
    Es kann aber auch sein, dass das bei PHP5 nicht mehr nötig ist, da dort das Kopie/Referenz-Konzept geändert wurde.

    http://de3.php.net/manual/de/language.pseudo-types.php#language.types.callback

  2. Hallo Franz,

    Wenn ich das ganze aber in ein eine Klasse verpacke, weiß ich nicht, wie ich dem xml_set_element_handler die klasseninterne funktion übergeben soll.

    mit xml_set_object().

    Grüße aus Nürnberg
    Tobias