Completed
Push — work-fleets ( 6b7253...c0452c )
by SuperNova.WS
06:17
created

DbResultIterator::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 5
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 9
rs 9.6666
1
<?php
2
3
/**
4
 * Class DbResultIterator
5
 *
6
 * @property mixed $_result
7
 */
8
abstract class DbResultIterator implements Iterator {
9
  /**
10
   * @var mixed $_result
11
   */
12
  protected $_result;
13
  /**
14
   * @var int
15
   */
16
  protected $fetchMode;
17
  /**
18
   * @var int
19
   */
20
  protected $position;
21
  /**
22
   * @var array
23
   */
24
  protected $currentRow;
25
26
  abstract protected function fetchCurrentRow();
27
28
  /**
29
   * Constructor
30
   *
31
   * @param mixed $result
32
   * @param int   $fetchMode constant (MYSQLI_ASSOC, MYSQLI_NUM, MYSQLI_BOTH)
33
   */
34
  public function __construct($result, $fetchMode = MYSQLI_ASSOC) {
35
    $this->_result = $result;
36
    $this->fetchMode = $fetchMode;
37
38
    $this->position = 0;
39
    // prefetch the current row
40
    // note that this advances the Results internal pointer.
41
    $this->fetchCurrentRow();
42
  }
43
44
  /**
45
   * Destructor
46
   * Frees the Result object
47
   */
48
  public function __destruct() {
49
    //TODO
0 ignored issues
show
Unused Code Comprehensibility introduced by
55% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
50
//    $this->Result->free();
51
  }
52
53
  /**
54
   * Return the current element
55
   * Returns the row that matches the current position
56
   * @link http://php.net/manual/en/iterator.current.php
57
   * @return mixed Can return any type.
58
   * @since 5.0.0
59
   */
60
  public function current() {
61
    return $this->currentRow;
62
  }
63
64
  /**
65
   * Move forward to next element
66
   * Moves the internal pointer one step forward
67
   * @link http://php.net/manual/en/iterator.next.php
68
   * @return void Any returned value is ignored.
69
   * @since 5.0.0
70
   */
71
  public function next() {
72
    // prefetch the current row
73
    $this->fetchCurrentRow();
74
75
    // and increment internal pointer
76
    ++$this->position;
77
  }
78
79
  /**
80
   * Return the key of the current element - the current position
81
   * @link http://php.net/manual/en/iterator.key.php
82
   * return mixed scalar on success, or null on failure.
83
   * @return int
84
   * @since 5.0.0
85
   */
86
  public function key() {
87
    return $this->position;
88
  }
89
90
  /**
91
   * Checks if current position is valid
92
   * Returns true if the current position is valid, false otherwise.
93
   * @link http://php.net/manual/en/iterator.valid.php
94
   * @return boolean The return value will be casted to boolean and then evaluated.
95
   * Returns true on success or false on failure.
96
   * @since 5.0.0
97
   */
98
  public function valid() {
99
    return $this->position < $this->_result->num_rows;
100
  }
101
102
  /**
103
   * Rewind the Iterator to the first element
104
   * @link http://php.net/manual/en/iterator.rewind.php
105
   * @return void Any returned value is ignored.
106
   * @since 5.0.0
107
   */
108
  public function rewind() {
109
    // data_seek moves the Results internal pointer
110
    $this->_result->data_seek($this->position = 0);
111
112
    // prefetch the current row
113
    // note that this advances the Results internal pointer.
114
    $this->fetchCurrentRow();
115
  }
116
117
}
118