1. Situația problemei
Deci, să ia în considerare exemplul următor. Există trei fișiere text, fiecare dintre care conține un anumit set de numere. Iată conținutul unui fișier:
clasă specială, următorul conținut este prevăzut pentru citirea acestor fișiere:
Această clasă este destul de simplu și conține doar o get_numbers metoda (). Această metodă are ca argument o matrice $ fișiere, care conține fișierele de a citi numele. După verificarea disponibilității fișierelor de date, vom face să le citesc, iar conținutul sunt înregistrate în $ datele de pre-variabilă, și apoi în numerele de proprietate $. Să ne uităm în browser-ul va afișa acest cod:
Clasa își execută sarcina, dar ce se întâmplă dacă spunem, ceva timp va trebui să fie un anumit mod de a prelucra datele obținute din fișierele. De exemplu, înmulțită cu numărul sau adăugați o linie, etc. Astfel, este necesar să se rescrie codul pentru această metodă, deoarece nu este universal și nu doar o singură sarcină. Prin urmare, în această lecție vom adăuga versatilitatea acestei clase, folosind funcția de apel invers.
2. Clasa Modernizarea
Primul pas este de a determina ceea ce este o funcție de apel invers. Funcția de apel invers (callback) - prevede transferul anumitor cod executabil ca unul dintre parametrii la alt cod. Adică, funcția de apel invers permite o anumită metodă de a executa cod care este specificat în argumentele sale. Funcția de apel invers este - de regulă funcțiile obișnuite, care sunt în mod direct sau atunci când nu sunt numite.
Funcția de apel direct: Funcția (). Reapelări sunt de obicei transmise ca parametru la o altă funcție. Si in timp ce trec un pointer (link) la funcția. Acum să modificați get_numbers cod metoda (), după cum urmează:
Primul lucru adăugată - este al doilea argument opțional $ callback = FALSE. Acesta este un pointer la un link de apel invers. Care implicit este FALSE. Și în al doilea rând, a adăugat cec în cazul în care variabila $ apel invers furnizează un pointer la funcția de apel invers. Deci, aveți nevoie pentru a apela această funcție. Pentru a face acest lucru, verificați - Este posibil pentru a apela un indicator de funcție este stocat în $ apel invers variabilă. Pentru această funcție scop is_callable ($ apel invers), care ia ca argument un pointer la o funcție. Se întoarce TRUE, în cazul în care funcția este într-adevăr, puteți apela pentru executare.
Pentru a apela funcția de apel invers standard utilizat: call_user_func ($ apel invers, fișier $, $ date), care este primul parametru are un pointer la o funcție și ulterioare - argumente care trebuie să fie transferate la un apel de funcție.
Astfel, vom pune în crearea unei metode - un fel de universalitate. La momentul potrivit, dacă avem nevoie să afecteze într-un fel datele returnate. Este suficient pentru a crea o funcție callback și trece un pointer ca parametru get_numbers () metoda.
3. Creați funcții de apel invers
Există trei tipuri principale de funcții de apel invers:
1. Funcția clasică - ca o funcție de apel invers. Să creeze o funcție. Nu uita despre parametrii ce ar trebui să ia:
2. Metoda de clasă statică - ca funcție de apel invers. Să creeze o clasă și adăugați o metodă:
3. Metoda uzuală a unei clase - ca o funcție de apel invers. Să adăugăm această metodă la clasa Clasa_Mea creat anterior:
Acum, să numim get_numbers () metoda și a vedea cum să treacă o funcție parametru de apel invers al fiecărui tip. Deci, ca de obicei, vom apela metoda după cum urmează:
Variabila $ callback va stoca un pointer la funcția de apel invers. Acest lucru înseamnă că, pentru fiecare tip de apel, este suficient pentru a defini această variabilă înainte de codul de apel. Acum, pentru primul tip de funcții de apel invers:
Și, în consecință, pe ecran, vom vedea următoarele:
Pentru al doilea tip:
Deoarece al doilea tip - aceasta este o clasă statică, astfel încât callback în variabila $, aveți nevoie pentru a salva matrice. Prima este o celulă, clasa descrisă în care această metodă statică. În a doua celulă indică faptul că numele metodei statice. Pe ecran vom vedea următoarele:
Pentru al treilea tip:
Deoarece al doilea tip - aceasta este metoda uzuală, atunci trebuie să specificați, de asemenea, toate variabila matrice $ apel invers, în care prima celulă pentru a menține obiectul de clasă, în cazul în care este descrisă metoda dorită. Și specificați numele metodei în a doua celulă. Pe ecran vom vedea următoarele:
După cum puteți vedea, atunci când apelați funcțiile de apel invers vom schimba get_numbers metoda de acțiune (). Și la sfârșitul acestei lecții, aș dori să arate mai mult de două moduri de a crea funcții de apel invers:
1. Crearea unei funcții anonime și salvarea unui pointer la acesta într-o variabilă:
În acest caz, vom vedea în următorul ecran:
2. Crearea unei funcții folosind create_function () funcție (primul parametru este un șir de argumente a trecut, al doilea - linie de cod funcția):
Pe ecran vom vedea următoarele:
Cum vedeți utilizarea acestor funcții, adaugă versatilitate și flexibilitate pentru a crea script-uri. Prin urmare, în unele cazuri, acestea sunt foarte utile și ar trebui să fie utilizate.
La această lecție este finalizată. Toate cele mai bune și o codificare de succes.
Cele mai multe știri IT si dezvoltare web pe canalul nostru-Telegram