Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: iterator .co to jest? jak to działa
Forum PHP.pl > Forum > PHP
szypi1989
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?
Fifi209
Po pierwsze jak chcesz pomocy, wrzuć to w tagi odpowiednie bo nie będzie nikt tego czytał w przeciwnym wypadku.
lDoran
1. Tagi
2. BBCode
3. http://pl.wikipedia.org/wiki/Iterator
Zyx
4. Rozumiesz w ogóle obiektówkę?
5. http://pl.wikibooks.org/wiki/PHP/Iteratory
Spawnm
@szypi1989 - Proszę dodać BBcode.

Fifi - nie baw się w moda tylko raportuj.
Crozin
Piszę publicznie, bo lekko mnie zirytowała postawa Spawnma (czy raczej powinienem napisać: moderatora).

Gdzie fifi209 bawił się niby w moderatora? Zwrócił uwagę na pewne nieestetyczne i szkodzące samemu autorowi "zachowanie", czyli zrobił dokładnie to samo co Ty - w dodatku zrobił to o kilka godzin wcześniej (to chyba dobrze). Nie wykrzykiwał, nie kazał przenieść wątku, nie groził zamknięciem, nie robił niczego "moderatorskiego".

Żeby dalej nie przedłużać OTa prosiłbym by albo ten zarzut wydzielić do osobnego wątku, albo odpisać na PW - jeżeli będzie taka konieczność.
marcio
Chodzi o to zeby moc pracowac na obiektach jak na kolekcjach, cos jak petla forech.Nie wiem jak ci to wytlumaczyc.
Np w python'ie petla for ma wbudowane iteratory, a w generatorach mozesz jawnie wywolywac iteratory takie jak next() czy send().
szypi1989
rozumiem obiektówke.dobra juz wiem jak ten iterator działa
i do czego służy
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.