Prelegerea acoperă conceptul unei funcții, funcțiile definite de utilizator, argumentele funcțiilor, argumentul care trece prin valoare și prin referință, valoarea argumentelor implicite și valorile returnate de funcția (return ()). Un exemplu este crearea unei interfețe web pentru generarea unui formular HTML.
În această prelegere va fi considerată crearea și utilizarea funcțiilor în PHP. Vorbind despre "funcții", nu înțelegem toate funcțiile existente în PHP, ci doar funcțiile definite de utilizator. Vom analiza modalitățile de a specifica astfel de funcții, metode de trecere a argumentelor, folosind argumente cu o valoare implicită și valorile returnate de funcție.
De exemplu, creați o interfață web pentru generarea unui formular html. Adică utilizatorul alege elementele formei pe care trebuie să le creeze și caracteristicile acestor elemente, iar programul nostru generează forma dorită fără programare.
Funcții definite de utilizator
Pentru ce sunt funcțiile? Pentru a răspunde la această întrebare, trebuie să înțelegeți care sunt funcțiile în general. În programare, la fel ca în matematică, o funcție este o cartografiere a argumentelor sale cu privire la setul de valori sale. Aceasta este funcția pentru fiecare set de valori ale argumentului returnează orice valori care sunt rezultatul muncii sale. De ce avem nevoie de funcții, să încercăm să explicăm prin exemplu. Un exemplu clasic al unei funcții în programare - o funcție care calculează factorialul unei valori. Asta este, vom da un număr, și ne întoarce la factorial sale. Nu este nevoie pentru fiecare număr, pe care dorim să obțineți factorialul, repetați același cod - pur și simplu apel funcția cu un argument al acestui număr.
Funcția de calcul al factorială a unui număr natural
Astfel, atunci când desfășurăm acțiuni în care a trasat dependența unor date, și în același timp, ar putea fi necesar pentru a efectua aceleași acțiuni, dar cu alte date originale, este convenabil să se folosească funcțiile mecanismului - să emită o acțiune bloc ca o funcție a corpului. și modificarea datelor - ca parametri.
Cum sună funcția? Specificați numele funcției și, în paranteze, o listă a valorilor parametrilor săi, dacă este cazul:
Când pot apela o funcție? Ar părea o întrebare ciudată. Funcția poate fi apelată după definiția acesteia, adică în orice linie a programului sub blocul funcției f_name (). În PHP3, a fost într-adevăr așa. Dar deja în PHP4 nu există o astfel de cerință. Întregul punct este modul în care interpretul procesează codul rezultat. Singura excepție este funcțiile care sunt definite condiționat (în interiorul declarațiilor condiționale sau în alte funcții). Atunci când o funcție este definită în acest fel, definiția acesteia trebuie să fie precedată de chemarea acesteia.
Exemplul 5.1. Definirea unei funcții în cadrul unei instrucțiuni condiționale
Dacă funcția este definită odată în program, atunci nu o puteți înlocui sau o șterge mai târziu. Chiar dacă numele funcțiilor sunt insuficiente pentru litere mici, este mai bine să apelați funcția cu același nume ca în definiție.
Exemplul 5.2. Definirea unei funcții în interiorul unei funcții
Să analizăm în detaliu argumentele funcțiilor, scopul și utilizarea lor.
Argumente funcționale
Fiecare funcție poate avea, așa cum am spus deja, o listă de argumente. Cu ajutorul acestor argumente, diferite informații sunt transferate funcției (de exemplu, valoarea numărului al cărui factorial urmează a fi calculat). Fiecare argument este o variabilă sau o constantă.
Cu argumente, datele pot fi transmise funcției în trei moduri diferite. Aceasta este trecerea argumentelor prin valoare (folosită în mod implicit), prin referință, și setarea valorii implicite a argumentelor. Să luăm în considerare aceste metode mai detaliat.
Atunci când un argument este transmis unei funcții prin valoare, modificarea valorii unui argument în interiorul unei funcții nu afectează valoarea sa în afara funcției. Pentru a permite unei funcții să își modifice argumentele, acestea trebuie să fie transmise prin referință. Pentru a face acest lucru, în definiția funcției, înainte de numele argumentului, trebuie să scrieți caracterul ampersand "".
Exemplul 5.3. Transmiterea argumentelor prin referință
În funcție, puteți defini valorile implicite ale argumentului. Valoarea implicită trebuie să fie o expresie constantă, nu o variabilă și nu o reprezentare a clasei sau o chemare la o altă funcție.
Avem o funcție care creează un mesaj de informare a cărui semnătură variază în funcție de valoarea parametrului care îi este transmis. Dacă valoarea parametrului nu este specificată, se utilizează semnătura "Comitetul de organizare".
Exemplul 5.4. Valorile implicite ale argumentului
Rezultatul acestui script va fi:
Dacă funcția are mai mulți parametri, atunci argumentele pentru care sunt specificate valorile implicite trebuie să fie scrise după toate celelalte argumente din definiția funcției. În caz contrar, va apărea o eroare dacă aceste argumente sunt omise atunci când este apelată funcția.
Ca urmare a scenariului, vom obține următoarele
Dacă scriem astfel:
Că, în consecință, vom primi:
Listele argumentelor cu lungime variabilă
În PHP4, puteți crea funcții cu un număr variabil de argumente. Adică, noi creăm o funcție fără să știm în avans, cu câte argumente va provoca. Pentru a scrie o astfel de funcție, nu este necesară nicio sintaxă specială. Totul se face cu funcțiile încorporate func_num_args (). func_get_args (). func_get_args ().
Funcția func_num_args () returnează numărul de argumente transmise funcției curente. Această funcție poate fi utilizată numai în cadrul definiției unei funcții definite de utilizator. Dacă apare în afara funcției, interpretul va emite un avertisment.
Exemplul 5.5. Folosind funcția func_num_args ()
Funcția func_get_arg (numărul argumentului întreg) returnează un argument din lista de argumente transmise funcției, numărul ordinal al căruia este specificat de numărul argumentului. Argumentele funcției sunt considerate începând de la zero. Ca func_num_args (). această funcție poate fi utilizată numai în cadrul definiției unei funcții.
Numărul argumentului nu poate depăși numărul de argumente transmise funcției. În caz contrar, va fi generat un avertisment și func_get_arg () va reveni Fals.
Să creăm o funcție pentru verificarea tipului de date, a argumentelor sale. Considerăm că testul a avut succes dacă primul argument al funcției este un întreg, al doilea este un șir.
Exemplul 5.6. Funcție pentru verificarea tipului de date, a argumentelor sale
Rezultatul lucrării va fi următorul.
Funcția func_get_args () returnează o matrice constând dintr-o listă de argumente transmise funcției. Fiecare element al matricei corespunde argumentului transmis funcției. Dacă funcția este utilizată în afara definiției unei funcții definite de utilizator, este generat un avertisment.
Rescriem exemplul anterior utilizând această funcție. Vom verifica dacă un argument întreg întreg trecut la o funcție este un întreg:
După cum puteți vedea, combinații de funcții func_num_args (). func_get_arg () și func_get_args () sunt utilizate pentru a permite funcțiilor să aibă o listă de variabile de argumente. Aceste funcții au fost adăugate numai în PHP 4. În PHP3, pentru a realiza acest efect, puteți utiliza un argument ca argument al funcției. De exemplu, aici este posibil să scrieți un script care verifică dacă fiecare parametru impar al funcției este un întreg:
Utilizarea variabilelor în cadrul unei funcții
Variabilele globale
Pentru a utiliza variabile în interiorul funcției din afara acesteia, aceste variabile trebuie declarate ca variabile globale. Pentru a face acest lucru, în corpul funcției, listați numele după cuvântul cheie global:
Exemplul 5.7. Variabilele globale
Ca rezultat al acestui script, primim:
Aceasta înseamnă, de exemplu, că ștergerea variabilei $ var1 nu șterge variabila globală $ _GLOBALS ["var1"].
Variabile statice
Exemplul 5.8. Folosind o variabilă statică
Valorile returnate
Toate funcțiile enumerate mai sus ca exemple au efectuat anumite acțiuni. În plus față de astfel de acțiuni, orice funcție poate reveni ca urmare a muncii sale o anumită valoare. Aceasta se face folosind declarația de returnare. Valoarea returnată poate fi de orice tip, inclusiv liste și obiecte. Când interpretul întâlnește comanda de revenire în corpul funcției. imediat termină execuția și merge la linia din care a fost apelată funcția.
De exemplu, vom compune o funcție care returnează vârsta unei persoane. Dacă o persoană nu a murit, atunci vârsta este considerată relativă la anul în curs.
În acest exemplu, nu ați putut utiliza funcția de returnare. ci pur și simplu înlocuiți-l cu ecoul funcției de ieșire. Cu toate acestea, dacă mai facem ca funcția să returneze o anumită valoare (în acest caz, vârsta persoanei), atunci în program putem atribui oricare variabilă o valoare acestei funcții:
Ca urmare a funcției, poate fi returnată o singură valoare. Valorile multiple pot fi obținute prin returnarea unei liste de valori (matrice unidimensională). Să presupunem că vrem să ajungem la vârsta deplină a unei persoane într-o zi.
Atunci când o funcție returnează mai multe valori pentru prelucrare într-un program, este convenabil să se utilizeze lista construirii de limbi (), care permite ca o acțiune să atribuie valori mai multor variabile simultan. De exemplu, în exemplul anterior, lăsând funcția neschimbată, ați putea procesa valorile returnate astfel:
În general, construcția listă () poate fi utilizată pentru a atribui valori variabile elementelor din orice matrice.
Exemplul 5.9. Utilizarea listei ()
Returnați linkul
Exemplul 5.10. Returnați linkul
Funcții variabile
PHP acceptă conceptul funcțiilor variabile. Acest lucru înseamnă că, în cazul în care un nume de variabilă se termină cu paranteze, PHP va căuta o funcție cu același nume și încearcă să-l execute.
Exemplul 5.11. Utilizând variabilele
În acest exemplu, funcția Show_text trimite doar o linie de text. Se pare, de ce să creați o funcție separată pentru aceasta dacă există o funcție specială ecou (). Faptul este că funcțiile cum ar fi ecou (). print (). unset (). include () și așa mai departe. nu poate fi folosit ca funcție variabilă. Adică dacă scriem:
atunci interpretul va afișa o eroare:
Prin urmare, pentru a folosi oricare dintre funcțiile enumerate mai sus ca funcție variabilă. trebuie să vă creați propria funcție, pe care am făcut-o în exemplul anterior.
Funcții interne (încorporate)
Vorbind despre funcțiile definite de utilizator, nu puteți spune câteva cuvinte despre funcțiile încorporate. Cu unele funcții încorporate. cum ar fi ecou (). print (). data (). include (). ne-am intalnit deja. De fapt, toate funcțiile listate, cu excepția datei (). sunt construcții lingvistice. Acestea sunt incluse în kernel-ul PHP și nu necesită setări și module suplimentare. Funcția date () este, de asemenea, inclusă în kernelul PHP și nu necesită setări. Dar există și funcții pentru lucrul cu care trebuie să instalați diferite biblioteci și să conectați modulul corespunzător. De exemplu, pentru a utiliza funcțiile bazei de date MySql, trebuie să compilați PHP cu suport pentru această extensie. Recent, cele mai comune extensii și caracteristicile lor respective incluse inițial în PHP, astfel încât să puteți lucra cu ei, fără apunea orice interpret suplimentar.
Rezolvarea problemei
Să ne amintim ce este problema. Vrem să scriem o interfață care vă permite să creați formulare html. Utilizatorul selectează elemente pe care și cât de mult doriți să creați, acesta vine cu numele, iar programul nostru va genera automat forma dorită.
Împărțim problema în mai multe sub-sarcini: selectând tipurile de elemente de intrare și numărul lor, creând nume de elemente de intrare și procesând datele recepționate, adică generarea directă a formei. Prima sarcină este destul de simplă: trebuie să scrieți formularul corespunzător, de exemplu, ca cel de mai jos (task_form.html):
Listing 5.12. task_form.html
Când scriem în numele unui element de formă, de exemplu tipuri []. aceasta înseamnă că numele său este următorul element al tipurilor de matrice. Asta este, avem primul element al formularului ("linia de introducere a textului") va fi numit tipuri [0]. și a doua (zona de text) - tipuri [1]. În browser task_form.html va arăta astfel:
Fig. 5.1. Formular pentru selectarea elementelor create și a numărului acestora
După trimiterea datelor din acest formular, vom primi informații despre elementele și câte elemente ale fiecărui tip trebuie să fie create. Următorul script solicită numele acestor elemente:
Listing 5.13. ask_names.php
Să presupunem că doriți să creați două elemente de tipul "șir de text" și un element din tipul de "zonă de text", după cum se menționează în formularul de mai sus. Apoi, scriptul ask_names.php îl va procesa astfel încât să obținem următoarea formă:
Fig. 5.2. Formular pentru introducerea numelor elementelor create
Listing 5.14. task.php
Rezultatul acestui script cu datele de intrare date mai sus va fi următoarea formă:
Fig. 5.3. Exemplu de formular generat de programul nostru