Witam mam problem otóż czytałem na stronie http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__3
Rozumiem co to są obiekt,klasy,dziedziczenie ale Itelator to dla mnie czarna magia ponieważ niewiem jak to działa:
Chodzi mi o przykładowo jak to działa:-( CZy to wszystko się automatycznie uruchamia gdy utworze obiekt klasy iteratora?
Czy tylko się uruchamia gdy wywołam pętle foreach jak w przykładzie.Kiedy się uruchami Iterator? kiedy uruchamiają się w nim metody?
Czy te funkcje next() ,current() są wymyślone? czy są wbudowane w iterator?
<?php
class nasz_iterator implements Iterator{
private $i;
private $obj;
public function __construct($obiekt){
$this -> obj = $obiekt;
$this -> i = 0;
} // end __construct();
public function rewind(){
$this -> i = 0;
} // end rewind();
public function valid(){
return $this -> obj -> key_exists($this -> i);
} // end valid();
public function key(){
return $this -> i;
} // end key();
public function current(){
return $this -> obj -> get_item($this -> i);
} // end current();
public function next(){
$this -> i++;
} // end next();
}
class x_file implements IteratorAggregate{
protected $plik;
public function __construct($plik){
if(file_exists($plik)){
$this -> plik = file($plik);
}else{
$this -> plik = array(0 => '');
}
} // end __construct();
public function getIterator(){
return new nasz_iterator($this);
} // end getIterator();
public function get_item($i){
return trim($this -> plik[$i]);
} // end get_item();
public function key_exists($i){
return isset($this -> plik[$i]);
} // end key_exists();
}
class x_list extends x_file{
public function __construct(){
$this -> plik = array();
} // end __construct();
public function add($item){
$this -> plik[] = $item;
return count($this -> plik) - 1;
} // end add();
}
$plix = new x_file('test.txt');
foreach($plix as $lnum => $linia){
echo $lnum.' - '.$linia.'<br/>';
}
$lista = new x_list;
$lista -> add('pozycja 1');
$lista -> add('pozycja 2');
$lista -> add('pozycja 3');
echo '<br/>';
foreach($lista as $id => $pozycja){
echo $id.' - '.$pozycja.'<br/>';
}
?>
Czy to sie po koleji uruchamia? Czy te funkcje next() ,current() są wymyślone? czy są wbudowane w iterator?