Generatoare în php

Dacă auzi ceva despre iteratori, atunci probabil știți că iterație - un concept foarte important pentru lumea de programare, dar punerea în aplicare a interfețelor necesare pentru a crea un obiect iterator poate fi sarcină foarte supărătoare, din cauza cantității mari de cod șabloane care este necesar să scriem pentru iterator. Dar odată cu lansarea PHP 5.5, generatoarele au venit în sfârșit la noi!







În acest articol, mă voi uita la generatoare care vă permit să implementați funcționalitatea iteratorilor simpli fără prea mult efort, fără a trebui să trageți întreaga complexitate a interfeței Iterator.

Cum funcționează generatoarele?

Potrivit Wikipedia Generator „este foarte similar cu funcția pe care returnează matrice, deoarece oscilatorul are parametri de intrare, acesta poate fi numit în sus și generează o secvență de valori“. aceasta este o trăsătură comună, dar în loc să returneze o singură valoare dă cât mai multe valori pot fi solicitate de la acesta - generatorul în general. Generatorul arată ca o funcție, dar se comportă ca un iterator.

Generatorii utilizează randamentul cuvintelor cheie în locul cuvântului returnat. Acesta se comportă într-un mod similar, și se întoarce la punctul de asteptare, cu diferența că funcția nu este scos din stivă, iar starea sa este salvată în memorie. Acest lucru permite funcției să continue să lucreze din starea anterioară data viitoare când este apelată. De fapt, nu puteți utiliza cuvântul cheie returnat pentru a returna o valoare din generator, dar pentru a opri generarea de la execuție.

Manualul PHP spune: "Când generatorul este invocat, acesta returnează un obiect care poate fi pierdut". Este un obiect al Generatorului de clasă interioară. care implementează interfața Iterator. și se comportă ca un iterator unidirecțional. În timp ce iterați prin obiect, PHP cheamă generatorul de fiecare dată când are nevoie pentru a obține valoarea. Statul este stocat de fiecare dată când generatorul emite o valoare, astfel încât data viitoare când PHP solicită o valoare, generatorul restabilește starea sa anterioară.

Acest cod va afișa următoarele:

Primul nostru generator

Să rescriem proba generatorului Python în PHP. (rețineți că ambele piese de cod nu le pasă de verificarea erorilor).

Generatorul de funcții deschide un fișier și produce fiecare linie a fișierului, dacă a fost solicitată. De fiecare dată când se cheamă generatorul, acesta continuă să funcționeze din starea anterioară. Funcția nu pornește de la început, deoarece starea sa a fost salvată înainte ca executarea instrucțiunii de randament. Odată ce toate rândurile au fost atinse - generatorul își termină lucrările, ciclul este finalizat.

Întoarcerea cheilor

Iteratoarele din PHP constau din perechi cheie / valoare. În exemplul nostru, vom returna numai valoarea, iar în acest caz cheile vor fi numerice (tastele sunt numerice implicite). Dacă trebuie să întoarceți perechi asociative - schimbați doar formatul instrucțiunii de randament astfel încât să includă și cheia folosind sintaxa array.







Valorile de implementare

Operatorul randament nu numai că întoarce valori - poate lua și valori din afară. Aceasta se face prin apelarea metodei send () a obiectului generator cu transferul valorii necesare ca parametru. Această valoare poate fi utilizată în calcule sau în alte operațiuni. Metoda trece valoarea către generator ca rezultat al executării randamentului și reia execuția.

Rezultatul va fi următorul:

Salvați memoria cu generatoarele

Generatoare sunt bune atunci când procesarea de seturi mari de date, și nu doriți să aloce memorie pentru rezultate intermediare, sau dacă nu, veți avea nevoie de toate aceste rezultate, la toate. Datorită modului în care sunt procesate rezultatele, utilizarea memoriei poate fi redusă la minimul necesar pentru a stoca numai rezultatul curent al lucrării.

Imaginați-vă rezultatul fișierului funcției (). care returnează toate liniile fișierului lizibil ca matrice. Dacă vom compara rezultatele funcției de fișiere () și funcția de file_lines noastre () pe același fișier cu 100 de paragrafe de text aleatoare, funcția de fișier () este utilizat de aproximativ 110 de ori mai multă memorie decât generatorul.

concluzie

Odată cu introducerea generatoarelor, PHP oferă un instrument puternic în mâinile dezvoltatorilor. Acum putem scrie rapid iteratori, păstrând în același timp cantități semnificative de memorie în timp ce aplicația rulează. Sper că, în acest manual, am reușit să vă dau suficiente informații pentru a putea începe să utilizați generatoare în proiectele dvs.

Ultimele 5 lecții din rubrica "PHP"

Când vine vorba de securitatea unui site web, expresia "filtra totul, ecran totul" va fi întotdeauna relevantă. Astăzi, să vorbim despre filtrarea datelor.

  • Expressive 2 acceptă posibilitatea conectării altor componente ZF pe un circuit special. Nu toată lumea îi place această decizie. În acest articol, vom descrie modul de îmbunătățire a procesului de conectare a mai multor module.

  • Să presupunem că trebuie să trimiteți niște informații către Google Analytics din scriptul de pe server. Cum se face. Răspunsul este în această notă.

  • O selecție de mai multe tipuri de nisip PHP. Pe unele veți putea să vă puneți codul online, dar există și soluții pe care le puteți implementa pe site-ul dvs.

    eroarea din cod ar trebui să fie doar echo "Realizat $ i"; fără n

    Generatoare în php

    Prin obținerea de informații imediat prin două canale (vedere și auz), eficiența predării este mult mai mare decât învățarea din cărți. Și temele și testele online vă vor permite să gândiți în mod constant în limba pe care o învățați și să vă verificați imediat cunoștințele!

    Generatoare în php

    Generatoare în php

    Dacă doriți să învățați HTML mult timp, atunci am o veste bună pentru dvs.!

    Generatoare în php

    Dacă ați învățat deja HTML și doriți să treceți mai departe, următorul pas este să învățați tehnologia CSS.

    Generatoare în php

    Dacă doriți să înțeleagă conceptele de domeniu si hosting, învață cum să creeze o bază de date, încărca fișiere pe un site web prin intermediul unui server FTP, crea subdomenii, configurați cutiile poștale pentru site-ul și să monitorizeze participarea, acest curs este conceput special pentru tine!







    Articole similare

    Trimiteți-le prietenilor: