Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> iterator .co to jest? jak to działa
szypi1989
post
Post #1





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

Ostrzeżenie: (0%)
-----


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?

Ten post edytował szypi1989 14.09.2010, 10:07:05
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Po pierwsze jak chcesz pomocy, wrzuć to w tagi odpowiednie bo nie będzie nikt tego czytał w przeciwnym wypadku.
Go to the top of the page
+Quote Post
lDoran
post
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 13
Dołączył: 15.11.2009

Ostrzeżenie: (0%)
-----


1. Tagi
2. BBCode
3. http://pl.wikipedia.org/wiki/Iterator
Go to the top of the page
+Quote Post
Zyx
post
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


4. Rozumiesz w ogóle obiektówkę?
5. http://pl.wikibooks.org/wiki/PHP/Iteratory
Go to the top of the page
+Quote Post
Spawnm
post
Post #5





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




@szypi1989 - Proszę dodać BBcode.

Fifi - nie baw się w moda tylko raportuj.
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ść.
Go to the top of the page
+Quote Post
marcio
post
Post #7





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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().
Go to the top of the page
+Quote Post
szypi1989
post
Post #8





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

Ostrzeżenie: (0%)
-----


rozumiem obiektówke.dobra juz wiem jak ten iterator działa
i do czego służy

Ten post edytował szypi1989 15.09.2010, 15:38:36
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 02:10