Când am discutat despre utilizarea variabilelor în capitolul 2, nu am abordat noțiunea de domeniu de aplicare a acestora. Să revenim la subiectul variabilelor și să discutăm cum funcționează împreună variabilele și funcțiile.
Domeniul variabil și variabilele globale
În cea de-a doua secțiune a acestui capitol, referindu-ne la parametrii transmiși la funcție, am observat că variabilele pot fi trimise la o funcție ca argumente. Cu toate acestea, puteți utiliza o variabilă dintr-o funcție, dacă aceasta este o variabilă globală. Variabila devine astfel utilizând declarația globală. Luați în considerare domeniul de aplicare sau domeniul de aplicare al variabilei. Domeniul de aplicare al unei variabile este acea parte a programului în care variabila există. În mod prestabilit, variabilele pe care le creați în script sunt disponibile în timp ce scriptul dvs. rulează. În schimb, variabilele de mediu (cum ar fi SOSTYPE) există pe server de la pornire la închidere.
Cu toate acestea, funcțiile creează un nou domeniu de aplicare. Variabilele de funcții sunt argumente ale funcțiilor, iar orice variabile definite într-o funcție există numai în această funcție și nu sunt accesibile din exterior. Cu alte cuvinte, acestea sunt variabile locale cu un domeniu de aplicare local. În mod similar, o variabilă externă poate fi accesată numai prin trecerea acesteia la o funcție ca argument sau folosind instrucțiunea globală. Ultimul înseamnă aproximativ: "Vreau ca această variabilă în funcție să fie aceeași ca în afara funcției". Cu alte cuvinte, instrucțiunea globală convertește o variabilă locală cu un domeniu de aplicare într-o funcție la o variabilă globală cu un domeniu de aplicare în cadrul întregului program. Orice modificare a unei variabile globale într-o funcție Noe transferate automat la o variabilă cu același nume atunci când acesta este utilizat în afara funcției (după apelul funcției, dar finite), fără ajutorul declarației de returnare.
Sintaxa instrucțiunii globale este:
funcția FunctionName (SArgument) global $ Variable;
declarație (declarații);
Să analizăm în detaliu ce ne oferă instrucțiunea globalizării. Plain Nye variabilă, chiar dacă numele său în funcția este identică cu cea kim același nume în programul principal este o structură complet diferită (eventual cu o valoare diferită de funcția este variabilă). Lăsați linia de apel a funcției să semene cu funcția Nume_funcțional ($ Valuel). iar funcția este definită ca FunctionName ($ Argumentl). Atunci când PHP accesează funcția, acesta stabilește $ Argumentl egal cu $ Valuel, iar apoi primul este folosit în corpul funcției. Dacă modificați valoarea $ Argumentl în interiorul unei funcții, aceasta nu afectează valoarea lui $ Valuel. Dacă numele de variabilă coincideau, acest lucru nu ar schimba nimic: ele sunt încă două variabile diferite. Sfera de aplicare a unuia în interiorul funcției, cealaltă în afara funcției. Prin urmare, pentru a evita confuzia, atunci când scrie funcții, am folosit cu prudență nume diferite ale variabilelor în linia definiția funcției și în linia de chemarea ei.
Am atins acest subiect, deoarece, de fapt, nu este necesar să se aplice nume diferite. Pentru comoditate, puteți folosi același nume în linia de funcții și în șirul de apeluri (atunci este ușor să vă amintiți argumentele transmise), dar rețineți că acestea sunt variabile diferite. Ce se întâmplă cu valoarea unei variabile din interiorul unei funcții rămâne în funcție. În schimb, modificările la variabila din afara funcției nu afectează variabila cu același nume în interiorul funcției. Dar, dacă ați făcut o variabilă globală utilizând instrucțiunea globală, ea devine aceeași variabilă în interiorul și în afară. Folosind declarația globală
Variabilele $ Price și $ TaxRate vor fi introduse în funcția $ Cost and $ Tax folosind instrucțiunea globală, deci nu trebuie să le folosiți ca argumente.
taxă globală $;
Ele "comandă" funcțiile de a utiliza variabilele $ Cost și $ Tah care există deja în afara acestuia.
$ TotalCost
($ Cost * $ Cum de mult);
dacă ($ TotalCost <50) AND ($Savings) ) print ("Your $$Savings will not apply because
- valoarea totală a vânzării este sub! \ N
„);
> dacă ($ TotalCost> = 50) $ TotalCost = $ TotalCost $ Economii;
>.
$ TotalCost = $ TotalCost * $ Taxă;
retur $ TotalCost;
Deoarece funcția utilizează acum nume diferite de variabile, este necesar să se modifice calculele în consecință. Pentru a înțelege mai bine domeniul de aplicare al variabilei, am schimbat și variabila $ TheCost la $ TotalCost. Amintiți-vă că $ TotalCost într-o funcție nu este acea variabilă, ca o variabilă cu același nume, dar în afara funcției
„);
Pentru a arăta că declarația globală introduce o variabilă într-o funcție și că toate modificările implementate în funcție sunt aplicate la nivel global, imprimați valoarea lui $ Tah înainte și după apelul funcției.
$ TotalCost = Calculați Total ($ Cantitate, Discount);
Întrucât funcția are acum doar două argumente, trecerea a patru argumente cauzează o eroare.
este acum $$ Tax. \ n
„);
Dacă nu există o declarație globală, atunci valorile tipărite aici și de mai sus ar fi aceleași. Dar, deoarece variabila globală $ Tax a fost modificată în funcție, valorile tipărite vor fi diferite.
Listing 9.7 Deoarece funcțiile CalculateTotal necesită valorile variabilelor $ Cost și $ Tah, ele pot fi ușor incluse în instrucțiunea globală. Amintiți-vă că variabilele nu mai pot fi transmise ca argumente, acest lucru poate confunda programatorul și poate cauza anumite erori în funcționarea aplicației.
Setați valorile argumentului implicit
Când scrieți funcții, puteți seta argumentele la valorile implicite. Funcția va utiliza această valoare numai dacă nu primește un argument care va înlocui valoarea implicită cu valoarea reală atunci când este apelată. Cu alte cuvinte, setarea argumentului la o valoare implicită face ca acest argument să fie opțional, opțional atunci când este apelată funcția.
De exemplu, hai să luăm funcția CalculatePayments () (vezi Listing 9.7). Ca număr de plăți lunare, puteți seta valoarea la 12 în mod implicit, creând o funcție și utilizând următoarea sintaxă:
funcția CalculatePayments ($ Amount, $ NumberPayments = "12")
Apelarea unei funcții utilizând codul CalculatePayments ($ Sums); nu duc la probleme, ci la linia CalculatePayments ($ Sums, "2 4"); va înlocui valoarea variabilei $ NumberPayments de la valoarea implicită de 12 la valoarea reală de 24.
Valoarea implicită a argumentului este utilizată dacă logica programului implică o anumită valoare, pe care o puteți schimba. Cu toate acestea, trebuie să vă amintiți că argumentele implicite trebuie să fie întotdeauna scrise după alte argumente standard (adică nu au o valoare implicită). Acest lucru se datorează faptului că valorile argumentelor din PHP sunt atribuite direct în ordinea primirii lor din șirul de apeluri. Prin urmare, nu puteți să omiteți valoarea pentru primul argument și să setați valoarea la al doilea (aceasta indică faptul că ați trimis o valoare care va fi atribuită automat primului argument, nu celui de-al doilea). Luați în considerare un exemplu în care nu este necesar să apelați o funcție. Să presupunem că funcția este definită după cum urmează:
funcția CalculateTotal ($ HowMany, $ Pret = "20.00", $ TaxRate = "0.06")
Vom numi această linie:
Calculați totalul (3, "0,07");
În același timp, vom stabili valoarea argumentului howmany $ 3, care doresc să fie lăsat VIT indicele $ Pret egal cu 20.00 și în speranța de a schimba valoarea de $ 0,07 TaxRate. Din păcate, nimic nu va veni din ea. Variabila $ HowMany obține valoarea 3, $ 0.07 și $ TaxRate vor rămâne 0.06. Îmi amintesc că vrem să obținem un rezultat ușor diferit. Puteți obține rezultatul dorit după cum urmează:
Calculați totalul (3, "20,00", "0,07");
Acum, în lumina a ceea ce am învățat despre setarea valorilor argumentelor în mod implicit, schimbăm pagina numerelor.php (a se vedea Listing 9.7).
Scrierea unei funcții care utilizează valori implicite
Dacă trimiteți două argumente la funcția CalculatePayments (în loc de valoarea implicită, argumentul $ NumberPayments primește a doua valoare.
Apelarea funcției CalculatePayments O trece acum doar valoarea $ TotalCost ca argument, deoarece $ NumberPayments are o valoare implicită. Aici puteți trece și valoarea $ NumberPayments, dacă ați decis să utilizați o altă sumă de plăți lunare.
Listing 9.8 t Numere actualizate.php. Setarea valorii implicite în funcție face ca argumentul să fie opțional.
În toate exemplele din acest capitol, trimitem argumente către funcții prin valoare. Rezultă că o copie a valorii variabilei este trimisă la funcție, nu la variabila însăși. Puteți, de asemenea, să transmiteți argumente prin referință, ceea ce vă permite să modificați o variabilă într-o funcție fără a o face globală, dar acest lucru este un subiect prea complex, care nu este acoperit de această carte. Unele informații suplimentare figurează în anexa C.
Școlile diferite utilizează convenții diferite cu privire la numele argumentelor funcțiilor. Pe de o parte, folosirea unei funcții cu același nume ca și numele unei variabile în afara funcției face mai ușor să ne amintim cum sunt legate variabilele. Pe de altă parte, folosirea aceluiași nume de argument în funcții le poate face inutil legat de restul scriptului. Să spunem, și o metodă hibrid, în care partea superioară a numelui funcției adaugă pur și simplu un f cu literă mică, de exemplu, $ fHowMany și SfTaxRate. Unii programatori se referă la variabilele globale ca $ gVariable. Dacă îi atribuim numele, este important să rămânem consecvenți și să nu ne îndepărtăm de logica acceptată anterior.