frankx: mysqli-result-Iterator looft, aber "Pattern" mit this nicht

Beitrag lesen

Hellihello

public function rewind()
    {
        $this->row = mysqli_data_seek($this->query, 0);
        return $this->row;
    }

  
offenbar wird die Funktion rewind() vor der ersten Iteration durch ein foreach ausgeführt. Dort aber wird $this->row das Ergebnis der der Funktion mysqli\_data\_seek zugewiesen. Diese hat den den result-pointer zurückgesetzt, gibt aber im Erfolgsfalle true zurück - was oben fälschlicherweise der Klassenvariable $row zugewiesen wird.  
  
Ich habe deshalb jetzt:  
  
~~~php
  
class Robs_MysqlIterator implements Iterator  
{  
   protected $row = NULL;  
   protected $resource = NULL;  
 protected $key = 0;  
  
 private function __construct($resource)  
    {  
    $this->resource = $resource;  
    }  
  
  public function init($resource)  
  {  
  if (get_class($resource) === "mysqli_result") {  
   $instance = new Robs_MysqlIterator($resource);  
   return $instance;  
  } else {  
   return false;  
  }  
  }  
  
    public function key() {  
  return $this->key++;  
 }  
  
    public function current()  
    {  
        if($this->row != null) {  
            return $this->row;  
        }  
    }  
  
    public function next()  
    {  
        $this->row = mysqli_fetch_assoc($this->resource);  
        return $this->row;  
    }  
  
    public function rewind()  
    {  
        mysqli_data_seek($this->resource, 0);  
        $this->row = mysqli_fetch_assoc($this->resource);  
        return $this->row;  
    }  
  
    public function valid()  
    {  
        if($this->row == false) {  
            return false;  
        }  
        return true;  
    }  
}  
  

Für die public static function init suchte ich nach einem Pattern. Factory und Singleton sind es wohl nicht. Ich wollte die Überprüfung der resource (Parametervalidierung) nicht dem Konstruktor überlassen, was vielleicht auch Blödsinn ist. Immerhin konnte ich mit "new Klassenname" aber kein $this erzeugen, das war im var_dump dann NULL. Ob $instance = new Klassenname() hier besser zu machen geht?

Dank und Gruß,

frankx

--
tryin to multitain  - Globus = Planet != Welt
0 80

Standard PHP Library

frankx
  • php
  1. 0
    Tom
    1. 1
      Cybaer
    2. 0
      Peter Pan
      1. 0
        Tom
        1. 3
          Christian Seiler
          1. 0
            Tom
            1. 0
              Christian Seiler
    3. 0
      Sympathisant
      1. 0
        frankx
        1. 0
          Sympathisant
          1. 0
            frankx
            1. 0
              Sympathisant
            2. 0
              Vinzenz Mai
              1. 0
                Sympathisant
                1. 0

                  Kann das denn sein?

                  Tom
                  • menschelei
                  1. 0
                    Vinzenz Mai
                    1. 0
                      Tom
                  2. 12

                    Eine Lanze für strukturierte Programmierung und OOP

                    Christian Seiler
                    • programmiertechnik
                    1. 0

                      [++] SCNR

                      molily
                      1. 0
                        Tom
                    2. 0
                      Tom
                      1. 0
                        Christian Seiler
                        1. 0

                          [++] Eine Lanze [..]

                          Sympathisant
                          1. 0
                            Dirk Dorweiler
                            1. 0
                              Sympathisant
                              1. 0
                                Vinzenz Mai
                                1. 0
                                  Sympathisant
                                  1. 0
                                    Tom
                                    1. 0
                                      Sympathisant
                                      1. 2

                                        [++] Eine Lanze [..] für die sachbezogen diskussion

                                        frankx
                                      2. 0
                                        Tom
                                        1. 0
                                          Sympathisant
                                          1. 0

                                            Anonymer Stänkerer

                                            Tom
                                            • menschelei
                                            1. 0

                                              Anonymer Stänkerer??

                                              Sympathisant
                      2. 0
                        Dirk Dorweiler
                        1. 0
                          Tom
                          1. 0
                            Sven Rautenberg
                            1. 0

                              Nur eine Zwischennachricht [und ein Spendenaufruf]

                              Tom
                              1. 0
                                Vinzenz Mai
                                1. 0
                                  Tom
                                  1. 0
                                    Timo "God's Boss" Reitz
                                    1. 0
                                      Tom
                                  2. 0
                                    Dirk Dorweiler
                              2. 0
                                Tom
                                1. 0
                                  Sympathisant
                                  1. 0
                                    Tom
                                    1. 0
                                      Sven Rautenberg
                                      1. 0
                                        Tom
                                        1. 0
                                          Sympathisant
                                          • menschelei
                                          1. 0

                                            Es wird Text

                                            Tom
                                            1. 0
                                              Timo "God's Boss" Reitz
                                    2. 3
                                      Sympathisant
                                      1. 0

                                        Abschliessendes...

                                        Sympathisant
                                        • menschelei
                                2. 0

                                  ... die Hoffnung stirbt zuletzt

                                  Vinzenz Mai
                                  1. 0
                                    Tom
                                    1. 0
                                      Christian Seiler
                                    2. 0
                                      Dirk Dorweiler
                                    3. 0
                                      Vinzenz Mai
                                      1. 0
                                        Sven Rautenberg
                                        1. 0

                                          pro und contra OOP

                                          frankx
                                          1. 0
                                            Vinzenz Mai
                                          2. 0
                                            Sven Rautenberg
                                            1. 0
                                              at
                                        2. 0
                                          Sympathisant
                            2. 0
                              Tim Tepaße
                    3. 0
                      Dirk Dorweiler
        2. 0

          (Iteratoren)

          Tim Tepaße
          1. 0

            Iteratoren - mysqli-result-Iterator

            frankx
            1. 0
              Vinzenz Mai
              1. 0
                frankx
            2. 0

              mysqli-result-Iterator looft, aber "Pattern" mit this nicht

              frankx
    4. 0

      99 bottles of beer

      Tom
  2. 0

    Standard PHP Library - SplDoublyLinkedList

    frankx
    1. 0
      dedlfix
      1. 0
        frankx
        1. 0
          dedlfix