Callbacks :(

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

  • Callbacks :(

    Wieso kann ich von Callback-Funktionen aus nicht

    $this->foo beeinflussen/dessen Wert ändern?

    Welchen Workarround gibt es?

  • #2
    Re: Callbacks

    Original geschrieben von uschi
    Wieso kann ich von Callback-Funktionen aus nicht

    $this->foo beeinflussen/dessen Wert ändern?
    keine Ahnung, ich kann's...

    Welchen Workarround gibt es?
    gib als callback-Funktion eine Methode der Klasse an, vorzugsweise von $this

    Hier steht wie's geht: callback
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ich weiß, passiert trotzdem nichts. in der callback steht bei mir $this->foo[] = "bla". wenn ich mir dann in der callback $this->foo ausgeben lasse (es ist ein array) zeigt er mir den content an. nach der funktion die die callback aufruft (preg_replace_callback()) ist $this->foo wieder leer. im konstruktor wurde $foo richtig als array definiert und zischen preg_replace_callback() und meine print_r()-ausgabe steht kein code. daten sind einfach weg (leeres array).

      Kommentar


      • #4
        Code?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          na super, $this musste referenziert werden. dachte das wäre optional. *ditsch*

          Kommentar


          • #6
            Sorry, wenn ich jetzt so dumm frage. Wofür brauch ich das, bzw. was ist das? Hab den kram bei php.net gelesen, aber...

            Kommentar


            • #7
              PHP-Code:
              class prego
              {
                var 
              $test;

                function 
              prego () { $this->test "dies ist ein testtext"; }

                function 
              prego_callback () { /* tue was */ }

                function 
              prego_ruft_callback ()
                {
                   
              # falsch
                   
              preg_replace_callback ("*** regex ***""prego_callback"$this->test);

                   
              # falsch
                   
              preg_replace_callback ("*** regex ***", array ($this"prego_callback"), $this->test);

                   
              # richtig, man beachte die Referenz ;o
                   
              preg_replace_callback ("*** regex ***", array (&$this"prego_callback"), $this->test);
                }

              Zuletzt geändert von uschi; 29.07.2005, 09:50.

              Kommentar


              • #8
                Da fehlt ein &...
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  schon wieder danke

                  Kommentar


                  • #10
                    Ok, werds mir nachher mal zu gemüte führen - aber dank für die Ausführungen...

                    So richtig hab ichs noch nicht... Kann jemand mal nen aus dem "Leben" gegriffenes Beispiel dafür geben....?

                    thnx

                    Kommentar


                    • #11
                      Original geschrieben von prego
                      Ok, werds mir nachher mal zu gemüte führen - aber dank für die Ausführungen...

                      So richtig hab ichs noch nicht... Kann jemand mal nen aus dem "Leben" gegriffenes Beispiel dafür geben....?

                      thnx
                      Meinst du das Referenzieren?

                      Kommentar


                      • #12
                        PHP-Code:
                        class tpl {

                            var 
                        $loops = array();
                            var 
                        $code '';

                            function 
                        parse() {
                                
                        $this->parse_blocks(&$this->code);
                            }

                            function 
                        parse_blocks(&$tpl) {
                                
                        $tpl preg_replace_callback('%-loop (.*)-(.*)-/loop \1-%sU', array(&$this'parse_block'), $tpl);
                            }

                            function 
                        parse_block($block) {
                                
                        $loop = array('name' => $block[1], 'code' => $block[2]);
                                
                        $this->parse_blocks($loop['code']);
                                while (isset(
                        $this->loops[$unique uniqid('loop_')]));
                                
                        $this->loops[$unique] = $loop;
                                return 
                        $unique;
                            }

                        }

                        $tpl = new tpl();

                        $tpl->code 'hallo
                        -loop test1-
                        irgendwas
                        -loop test1_1-
                        nochwas
                        -/loop test1_1-
                        -/loop test1-
                        ende'
                        ;
                        $tpl->parse();
                        echo 
                        '<pre>'.print_r($tpltrue).'</pre>'
                        Eben kurz hingeschmiert, "Leben" genug?
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Ok, ich sehe es ein - ich werd wohl noch ein bischen lesen müssen. ich dank euch für eure ausführungen... Dachte ich hätte es verstanden, aber... nun gut - Werd mich am WE mal dran setzen.

                          Kommentar


                          • #14
                            Einfaches Beispiel einer Callback: http://de.php.net/manual/de/function.array-map.php

                            Übersetze Callback einfach mit "Rückruf" .
                            Zuletzt geändert von uschi; 29.07.2005, 10:59.

                            Kommentar

                            Lädt...
                            X