E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Diverse (10)

Libraria Standard PHP - Lucrul cu interfata Iterator

15.09.2009
Libraria Standard PHP - Lucrul cu interfata Iterator

Interfata Iterator este implementata in core-ul engine-ului Zend 2.0 si faciliteaza parcurgerea unor structuri de date complexe(cu proprietatea de a se parcurge intern). La prima vedere pare ceva foarte complicat, insa va puteti gandi ca orice poate fi parcurs in PHP folosind foreach, for, while, poate fi manipulat prin aceasta interfata: de la un simplu vector pana la row-urile rezultate dintr-un query SQL, continutul unui director sau liniile dintr-un fisier text.

Total vizualizari: 7253 7253 afisari   |   Comentarii  4   |   Rating   |   (3 voturi)   |   Timp necesar: 15 min 15 min   |   Nivel de cunostiinte necesar: Avansat  Avansat

Autor: cborodescu Incepator
Download
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1 2 3 »
comenteaza printeaza

Interfata Iterator

<?php 
 
Iterator extends Traversable {
  // Metodele interfetei Iterator
  abstract public mixed current()
  abstract public scalar key()
  abstract public void next()
  abstract public void rewind()
  abstract public boolean valid()
}
 
?>

Aceasta interfata este implementata in core-ul engine-ului Zend 2.0 si faciliteaza parcurgerea unor structuri de date complexe(cu proprietatea de a se parcurge intern). La prima vedere pare ceva foarte complicat, insa va puteti gandi ca orice poate fi parcurs in PHP folosind foreach, for, while, poate fi manipulat prin aceasta interfata: de la un simplu vector pana la row-urile rezultate dintr-un query SQL, continutul unui director sau liniile dintr-un fisier text.

Studiind interogarile din tabele MySQL, putem observa modul de parcurgere al rezultatului unui query:

<?php 
 
  // Structura complexa 
  $result = mysql_query("SELECT * FROM Utilizatori"); 
  
  // Parcurgerea simpla
  while ( $row = mysql_fetch_array($result) ) { 
      echo $row["Email"];  
  }
?>

Similar putem parcurge continutul unui director:

<?php 
  
  // Structura complexa 
  $dir = opendir('/director'); 
 
  // Parcurgere simpla
  while ( $file = readdir($dir) ) {
      // ...
  } 
?>

Iar pentru un fisier text:

<?php
  // Structura complexa
  $file = fopen("/director/fisier.txt", "r"); 
  
  // Parcurgere simpla
  while (!feof($file)) { 
      $line = fgets($file);
      // ...
  }
?>

Puteti observa deja ca in linii mari este vorba de 2 operatii care se repeta, indiferent  de tipul resursei manipulate:

  1. Initializarea
  2. Parcurgerea

Ne punem astfel urmatoarea intrebare: exista oare posibilitatea de a abstractiza aceste 2 operatii astfel incat indiferent de tipul de structura de data complexa, secventa de initializare-parcurgere sa fie absolut identica?

Haideti sa vedem mai intai ce metode avem la dispozitie in interfata Iterator:

  1. rewind()

Similar functiei reset() pentru vectori, aceasta metoda “deruleaza” iteratorul la primul element al structurii cu care se lucreaza.

  1. current()

Similar functiei current() pentru vectori, aceasta metoda intoarce elemental curent al structurii manipulate.

  1. key()

Similar functiei key() pentru vectori, aceasta metoda intoarce index-ul elementului curent al structurii manipulate.

  1. next()

Similar functiei next() pentru vectori, aceasta metoda  “trece” la urmatorul element al structurii manipulate.

  1. valid()

Aceasta functie este utilizata dupa apelarea rewind() sau next() pentru a testa daca elementul curent al structurii exista. Cu alte cuvinte, metoda este folosita pentru a testa daca s-a ajuns la finalul structurii de date.

Pagina:
« 1 2 3 »
comenteaza printeaza

Cuvinte cheie:   php,   SPL,   php5,   iterator,   rss

Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(3 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (4) spune-ti parerea
cata500 cata500 , Marti, 16 Februarie 2010, ora 20:24
#4

E foarte ok ii reusit ....felicitari celor care lau facut ..ac vreau sa postez si eu la asa ceva sa vad ce iasa

Raporteaza acest comentariu ca injurios!
alexandra alexandra , Miercuri, 16 Septembrie 2009, ora 12:25
#3

E ok, dar n-ar fi rau si un exemplu cu SimpleXMLIterator. Desigur, am un interes cand zic asta deoarece l-as folosi si eu :).

Raporteaza acest comentariu ca injurios!
cborodescu cborodescu , Miercuri, 16 Septembrie 2009, ora 11:14
#2

Da, voi scrie si alte tutoriale pentru SPL. Eu ma gandeam la Exceptii, ce parere ai?

Raporteaza acest comentariu ca injurios!
alexandra alexandra , Miercuri, 16 Septembrie 2009, ora 11:00
#1

Aveam nevoie la un moment dat sa afisez continutul unui xml si trebuie sa recunosc ca solutia gasita de mine nu e nici pe departe la fel de eleganta ca interfata Iterator. Ar fi super daca ai scrie tutoriale si despre alte interfete din SPL.

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4810
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4750
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4625
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4560
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4420
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Ruby on Rails StyleSheet CSS JSON Sony Vegas Powerpoint Gimp RoR XML Fireworks Javascript Dreamweaver Bridge Fotografie HTML Java AJAX Vista Photoshop Action Script MySQL PSD Outlook XHTML SWF Excel Flash Illustrator Verilog Python Word PHP SEO Lightroom COREL DRAW Swift 3D
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software