Problem variablezugriff in klasse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem variablezugriff in klasse

    hab eine klasse mit methoden oder funktionen , eine funktionen hat aber weitere funktionen in der funktion ... siehe unten. problem - ich möchte gern in der XMLstartElement funktion auf eine variable zugreifen $this->PrimaryKey aber egal was ich mache ich krieg keinen zugriff drauf, auch mit global hab ich es schon versucht ... was kann ich hier machen das übersteigt grad voll meinen horizont. wie komm ich aus der XMLstartElement funktion an die variable ... jemand ein tip?


    PHP-Code:

    class SQLtoXML
    {
        var 
    $ErrorCount;
        var 
    $ErrorInfo "";
        var 
    $Direction "export"//import : export
        
    var $SqlMode "mysql"// pear : mysql
        
    var $XmlHandler "";
        var 
    $XmlVersion "1.0";
        var 
    $XmlEncoding "UTF-8";
        var 
    $SqlTables "";
        var 
    $SqlQuery false;
        var 
    $SqlArgument false;
        var 
    $SqlFields = array();
        var 
    $XmlFields = array();
        var 
    $Xml "";
        var 
    $XmlBody "";
        var 
    $XmlFirstChild "";
        var 
    $XmlSecondChild "";
        var 
    $DuplicateStructure true;
        var 
    $PrimaryKey false;

           function 
    setPrimaryKey($primarykey)
        {
            
    $this->PrimaryKey $primarykey;
        }
        
        function 
    buildXmlHandler($xmlhandler)
        {
            
    $xml_string "";
            
    $xml_array = array();
            
            while(list(
    $key,$value) = each($xmlhandler)):
                
    $xml_string .= str_replace("_"," ",stripslashes($key)) ."="utf8_decode(stripslashes($value));
            endwhile;
            
            function 
    XMLstartElement($parser,$name,$attrs NULL)
            {
                     echo 
    $this->PrimaryKey;
            }
        
            function 
    XMLendElement($parser$name)
            {
            }
        
            function 
    XMLvalueElement($parser,$value)
            {
                
            }
        
            
    $xml_parser xml_parser_create();
            
    xml_parser_set_option($xml_parserXML_OPTION_CASE_FOLDING,false);
            
    xml_set_element_handler($xml_parser,"XMLstartElement","XMLendElement");
            
    xml_set_character_data_handler($xml_parser,"XMLvalueElement");
            if(!
    xml_parse($xml_parser,$xml_string,true)):
                
    $this->SetError("XML ERROR - ".xml_error_string(xml_get_error_code($xml_parser)." in line ".xml_get_current_line_number($xml_parser)));    
            endif;
            
    print_r($xml_array);
            
    xml_parser_free($xml_parser);
        }
        



  • #2
    versuch
    array(&$this,"XMLstartElement") als parameter zu übergeben
    Slava
    bituniverse.com

    Kommentar


    • #3
      weiß nicht obs klappt (bin kein großer in oo) aber wer weiß:

      PHP-Code:
      function XMLstartElement($parser,$name,$attrs NULL)
              {
                      global 
      $primarykey;
                      
      setPrimaryKey($primarykey
                      echo 
      $this->PrimaryKey;
              } 
      könnt aber auch totaler schwachsinn sein
      **********
      arkos
      **********

      Kommentar


      • #4
        danke aber beider hat nicht funktioniert, man is das ätzend

        Kommentar


        • #5
          welche fehlermeldung hast du bekommen?
          Slava
          bituniverse.com

          Kommentar


          • #6
            ne keine fehlermeldung aber er führt dann die XMLstartElement funktion nicht mehr aus

            PHP-Code:
            xml_set_element_handler($xml_parser,array(&$this,"XMLstartElement"),"XMLendElement"); 
            ach ist das beschwerlich ....

            fra*

            Kommentar


            • #7
              Du solltest vielleicht lieber prozedural schreiben...

              Wie kommst du auf die Idee, dass in einer FUNKTION (keine Methode) überhaupt eine Referenzierung mit $this möglich ist?
              Wenn du ein Objekt per variablen-Parameter an die Funktion übergibst, dann musst du natürlich auch den Parameter referenzieren, in diesem Falle also $Parser->Variablen-Name


              [edit]
              und brich deinen Quellcode um, keine Überbreite in Postings, siehe Regeln im sticky-Thread
              Zuletzt geändert von ghostgambler; 04.07.2006, 17:38.

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                der wird es auch auf andere weise nicht tun
                was ist $xml_string?
                der ist wenn ich mich nicht teusche nirgendwo defeniert
                Slava
                bituniverse.com

                Kommentar


                • #9
                  Original geschrieben von frank7l7
                  PHP-Code:
                  xml_set_element_handler($xml_parser,array(&$this,"XMLstartElement"),"XMLendElement"); 
                  und das ist doch auch voll Banane...
                  du deklarierst eine FUNKTION, keine METHODE, demnach kannst du diese Funktion nicht über $this referenzieren ... programmier mal mit error_reporting(E_ALL), php sollte dich für sowas mit Fehlern nur so überhäufen :/

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Original geschrieben von ghostgambler
                    Du solltest vielleicht lieber prozedural schreiben...

                    Wie kommst du auf die Idee, dass in einer FUNKTION (keine Methode) überhaupt eine Referenzierung mit $this möglich ist?


                    stimmt.
                    ich habe wegen der hitze die interne functionen mit methoden verwechseslt.
                    sorry
                    aber herkunft von $xml_string ist mir unbekannt
                    Slava
                    bituniverse.com

                    Kommentar


                    • #11
                      Wie kommst du auf die Idee, dass in einer FUNKTION (keine Methode) überhaupt eine Referenzierung mit $this möglich ist?
                      das is mir auch schon aufgefallen aber was sonst tun? ich kann die variable nicht über den handler übregeben? was meinst du den mit prozedural schreiben. oop ist halt noch etwas neu

                      fra*

                      Kommentar


                      • #12
                        Original geschrieben von frank7l7
                        das is mir auch schon aufgefallen aber was sonst tun? ich kann die variable nicht über den handler übregeben?
                        Objektinstanz als Parameter an die Funktion übergeben (per Referenz)?
                        (Wobei ich nicht abzuschätzen vermag, was das wieder für Nebenwirkungen haben könnte.)
                        was meinst du den mit prozedural schreiben.
                        Prozedurale Programmierung = (herkömmliches) Gegenstück zu OOP.
                        oop ist halt noch etwas neu
                        Eben drum vielleicht lieber prozedural ...
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Objektinstanz als Parameter an die Funktionübergeben (per Referenz)?

                          wie soll das gehen? kannst mir das mal zeigen, vielleicht funzt es ja?

                          Kommentar


                          • #14
                            Original geschrieben von frank7l7
                            wie soll das gehen? kannst mir das mal zeigen, vielleicht funzt es ja?
                            *seufz*
                            Das solltest du eigentlich schon verstanden haben ...

                            Was ist deine Objektinstanz?
                            Und wie übergibt man Variablen/Objekte per Referenz?
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              objektinstanz ist mir schon klar aber was soll ich instanzieren die klasse die ich benutze als $xml new SQLtoXML(); ?

                              wie man man Variablen/Objekte per Referenz übergibt weiss ich nicht - habe ich auch noch nie gebraucht? hab einen link dazu gefunden


                              http://www.bueltge.de/php-uebergabe-...-variable/157/

                              muss aber leider jetzt weg ... oh man 4 stunden mach ich das schon rum

                              danke soweit

                              Kommentar

                              Lädt...
                              X