Primul PHP 5.5 alpha a fost lansat public. După ce avem timp să încercăm și să experimentăm acest lucru, vă putem aduce acum o privire de ansamblu în profunzime a ceea ce să așteptăm cu nerăbdare!
Dacă doriți să urmați împreună cu acest articol, va trebui să instalați PHP 5.5 pentru dvs. Puteți găsi linkul la pachetul sursă aici. În plus, dacă aveți nevoie de fișierul binar Windows, îl puteți apuca din aceeași pagină.
Odată ce ați descărcat codul sursă, extrageți totul într-un dosar și navigați la acesta cu programul Terminal preferat. Puteți instala PHP oriunde doriți, dar, pentru comoditate, voi crea un director în rădăcina unității, numit PHP5.5
. Pentru a crea un nou dosar și apoi a-ți face utilizatorul proprietarul dosarului menționat, tastați următoarele în terminalul dvs.:
sudo mkdir /PHP5.5 numele de utilizator sudo chown /PHP5.5
Apoi, trebuie să decideți ce extensii și caracteristici doriți să fie instalate împreună cu copia dvs. de PHP. Din moment ce aceasta este o versiune Alpha, destinată doar testelor, nu mă voi preocupa de faptul că a fost prezentată pe deplin. Pentru acest tutorial, voi instala doar cURL, dar ar putea exista alte lucruri pe care doriți să le adăugați, cum ar fi MySQL sau zip support. Pentru a vedea o listă completă a opțiunilor de configurare, executați:
./ configure -h
Pe lângă opțiunea de a instala cURL, există și alte două proprietăți pe care trebuie să le setăm: prefix
și cu-config-file-path
opțiune. Aceste două proprietăți au stabilit locația instalării PHP și a locației ..ini
dosar, respectiv. Deci, în terminal, tastați:
./ configure --prefix = / PHP5.5 - cu -config-file-path = / PHP5.5 - cu-curl = ext / curl face make install
Prima linie configurează PHP cu cURL și stabilește locația în dosarul pe care l-am făcut mai devreme. Următoarele două linii construiesc PHP și mutați fișierele în directorul specificat. Următorul pas este copierea eșantionului php.ini
fișier în folderul PHP. Pentru aceasta, rulați:
cp php.ini-dezvoltare /PHP5.5/php.ini
Ar trebui să aveți acum totul instalat corect. Cea mai ușoară modalitate de a testa această nouă versiune este să rulați serverul Web încorporat. Navigați la cos
dosar în interiorul PHP5.5
director (cd /PHP5.5/bin
) și tip ./ php -t / Path / Către / Directory -S 0.0.0.0:4444
.
-T
opțiunea stabilește directorul rădăcină al serverului (adică locul unde veți plasa fișierele PHP) -S
proprietatea stabilește adresa IP și numărul portului la care trebuie să se lege serverul. Utilizarea 0.0.0.0
pentru adresa IP îi spune serverului să asculte toate adresele IP (de exemplu, localhost, 127.0.0.1, 192.168.0.100 etc.). Dacă totul merge bine, ar trebui să fiți întâmpinați cu un mesaj care vă spune că serverul ascultă pe portul IP / port specificat și vă va spune rădăcina documentului de unde servește. Acum putem începe să ne jucăm cu noile caracteristici!
Generatoarele vă permit să creați funcții personalizate, care păstrează starea între run-uri.
Cea mai mare adăugare la PHP 5.5 trebuie să fie generatoare. Generatoarele vă permit să creați funcții personalizate, care păstrează starea între run-uri. Funcționează cu un nou cuvânt cheie, numit Randament
, care pot fi utilizate într-o funcție atât pentru introducerea, cât și pentru transmiterea datelor.
În esență, atunci când funcția ajunge la o linie care conține comanda de randament, PHP va îngheța executarea funcției și va reveni la rularea restului programului. Când apelați ca funcția să continue - fie prin a-i spune să meargă mai departe, fie prin trimiterea de date - PHP va reveni la funcție și va lua locul unde a rămas, păstrând valorile oricăror variabile locale definite până acolo.
Acest lucru poate părea destul de rece la început, dar dacă vă gândiți, acest lucru deschide ușile pentru o mulțime de opțiuni de design interesante. În primul rând, simulează efectele altor limbi de programare care au "Lazy Evaluation", cum ar fi Haskell. Numai acest lucru vă permite să definiți seturi de date infinite și funcții de matematică după definiția lor reală. În plus, nu trebuie să creați cât mai multe variabile globale; dacă o variabilă este destinată numai unei funcții specifice, o puteți include într-un generator și lucruri precum contoarele se întâmplă automat de către generator în sine, sub forma cheii obiectului returnat.
Ei bine, este suficientă teorie pentru acum; Să aruncăm o privire asupra unui generator în acțiune. Pentru a porni, navigați la root-ul documentului pe care l-ați definit atunci când rulați serverul PHP și creați un fișier numit "index.php". Acum, deschideți fișierul și introduceți următoarele:
funcția fibonacci () $ a = 0; $ b = 1; în timp ce (adevărat) $ a = $ a + $ b; $ b = $ a - $ b; randamentul $ a;
Aceasta este funcția "Hello World" a seturilor de date infinite. Este o funcție care va afișa toate numerele fibonacci. Pentru a utiliza generatorul, tot ce trebuie să faceți este să tastați:
$ fib = fibonacci (); $ Fib-> curent (); $ Fib-> next (); $ Fib-> curent (); // ...
Ce se întâmplă aici este că facem $ FIB
un obiect generator și apoi aveți acces la comenzile de bază, cum ar fi actual()
și Următor →()
. actual()
funcția returnează valoarea curentă a generatorului; aceasta este valoarea a ceea ce ați obținut în funcție - în cazul nostru, $ a
. Puteți apela această funcție de mai multe ori și veți obține întotdeauna aceeași valoare, deoarece actual()
funcția nu spune generatorului să continue să evalueze codul său. Aici este locul Următor →()
funcția vine; Următor →()
este folosit pentru dezghețarea iteratorului și continuarea funcției. Deoarece funcția noastră este în interiorul unui infinit in timp ce
buclă, va îngheța din nou la următoarea Randament
comanda și putem obține următoarea valoare cu un alt apel la actual()
.
Beneficiul generatorilor este că variabilele locale sunt persistente.
Dacă ar fi trebuit să faci așa ceva în trecut, ar fi trebuit să faci ceva pentru
care pre-calculează valorile într-o matrice și se oprește după un anumit număr de iterații (de exemplu, 100), pentru a nu supraîncărca PHP. Beneficiul pentru generatori este că variabilele locale sunt persistente și puteți să scrieți doar ce trebuie să facă funcția, așa cum ar trebui să o facă. Ceea ce vreau să spun este că pur și simplu scrieți sarcina și nu vă faceți griji cu privire la variabilele globale și câte iterații ar trebui efectuate.
Cealalta cale Randament
poate fi folosit pentru a primi date. Funcționează în același mod ca înainte: când funcția ajunge la o linie cu Randament
cuvântul cheie, se va opri, dar, în loc să citiți date cu actual()
, îi vom da date cu trimite()
funcţie. Iată un exemplu în acest sens:
funcția Logger () $ log_num = 1; în timp ce (adevărat) $ f = randament; echo "Log #". $ log_num ++. ":". $ F; $ logger = Logger (); pentru ($ i = 0; $ i<10; $i++) $logger->trimite ($ i * 2);
Acesta este un generator simplu pentru afișarea unui mesaj de jurnal. Toate generatoarele încep într-o stare întreruptă; un apel către trimite
(sau chiar actual
) va porni generatorul și va continua până când acesta va atinge a Randament
comanda. trimite
comanda va introduce apoi datele trimise și va continua să proceseze funcția până la următoarea Randament
. Fiecare apel ulterior la trimite
va procesa o buclă; acesta va introduce datele trimise în $ f
, și apoi continuați până când se revine la următoarea Randament
.
Deci, de ce nu doar să puneți această funcție într-o funcție obișnuită? Ei bine, ai putea, dar atunci ai avea nevoie de o variabilă globală separată pentru a ține evidența numărului de jurnal sau ar trebui să creezi o clasă personalizată.
Nu vă gândiți la generatori ca pe o cale de a face ceva care nu a fost niciodată posibil, ci mai degrabă ca un instrument pentru a face lucrurile mai repede și mai eficient.
Chiar și seturi infinite au fost posibile, dar ar trebui să reproceseze lista de la început de fiecare dată (adică să treacă prin matematică până când ajunge la indexul curent) sau să stocheze toate datele sale în cadrul variabilelor globale. Cu generatoare, codul dvs. este mult mai curat și mai precis.
pentru fiecare
declaraţiiUrmătoarea actualizare pe care am descoperit-o destul de utilă este capacitatea de a sparge o matrice imbricată într-o variabilă locală într-o pentru fiecare
afirmație. listă
construcție a fost în jur de ceva timp (de la PHP4); aceasta hărți o listă de variabile într-un matrice. Deci, în loc să scrie ceva de genul:
$ data = array ("John", "Smith", "032-234-4923"); $ fName = $ date [0]; $ lName = $ date [1]; $ celula = $ date [2];
S-ar putea scrie doar:
$ data = array ("John", "Smith", "032-234-4923"); listă ($ fName, $ lName, $ cell) = $ date;
Singura problemă a fost că, dacă aveați o serie de tablouri (o matrice imbricată) de informații pe care ați vrut să le mapați, nu ați reușit să le circulați cu ele pentru fiecare
buclă. În schimb, va trebui să alocați pentru fiecare
rezultă la o variabilă locală și apoi o cartografiați cu o listă
construiți numai în bucla.
Începând cu versiunea 5.5, poți tăia omul din mijloc și curăța codul. Iată un exemplu de mod vechi, față de noul:
// - Metoda veche - // foreach ($ parentArr ca $ childArr) lista ($ one, $ two) = $ childArr; // Continuați cu bucla // - Metoda nouă - // Foreach ($ parentArr ca listă ($ one, $ two)) // Continuați cu bucla
Modul vechi ar putea să nu pară prea mult, dar este murdar și face codul mai puțin lizibil.
Pe placa grafică construită de Mac, am putut trece peste 200 de milioane de hash-uri pe secundă!
Acum, acest lucru necesită o mică cunoaștere a hashes și criptare pentru a aprecia pe deplin.
Cea mai ușoară modalitate de a avea o parolă în PHP a fost să folosiți ceva de genul MD5 sau un algoritm SHA. Problema cu funcțiile hash ca acestea este că ele sunt incredibil de ușor de calculat. Ele nu mai sunt utile pentru securitate. În zilele noastre, acestea ar trebui folosite numai pentru verificarea integrității unui fișier. Am instalat un dispozitiv de ștergere a GPU pe calculatorul meu pentru a testa această afirmație. Pe placa grafică pe care am construit-o pe Mac, am reușit să trec peste 200 de milioane de hash-uri pe secundă! Dacă ați fost dedicat și ați investit într-un top al liniei de configurare a plăcilor multi-grafică, ați putea trece prin miliarde de hash-uri pe secundă.
Tehnologia pentru aceste metode nu trebuia să reziste.
Deci, cum rezolvați această problemă? Răspunsul este că puneți o povară reglabilă asupra algoritmului. Ceea ce vreau să spun este că faceți greu să procesați. Nu că ar trebui să dureze câteva secunde pe hash, deoarece acest lucru ar distruge experiența utilizatorului. Dar imaginați-vă că ați făcut o jumătate de secundă pentru a genera. Apoi, un utilizator probabil nu și-ar fi dat seama de întârzierea, dar cineva care încearcă să bruteforce ar trebui să treacă prin milioane de încercări - dacă nu mai mult - și toate jumătățile secunde s-ar adăuga până la decenii și secole. Cum rămâne cu problema calculilor obținuți mai repede în timp? Aici intră partea "reglabilă": oricât de des, veți crește complexitatea pentru a genera un hash. În acest fel, vă puteți asigura că întotdeauna durează același timp. Aceasta este ceea ce dezvoltatorii PHP încearcă să încurajeze oamenii să facă.
Noua bibliotecă PHP este un "workflow" de "hashing", în care oamenii pot cripta, verifica și actualiza cu ușurință hash-urile și complexitatea lor în timp. În prezent, este livrat doar cu algoritmul bcrypt, dar echipa PHP a adăugat o opțiune, denumită implicită, pe care o puteți utiliza. Acesta va actualiza automat hashes-ul dvs. la cel mai sigur algoritm, atunci când adaugă altele noi.
Modul în care lucrează bcrypt este că vă execută parola prin criptarea loviturilor de pește X
de multe ori, dar în loc să folosești lovitura cu o cheie, astfel încât să o poți inversa mai târziu, trece trecerea precedentă ca cheia următoarei iterații. Potrivit Wikipedia, vă rulează parola 2
la X
Cantitate. Aceasta este partea pe care ați putea să o ajustați. Spuneți, chiar acum, doriți să utilizați un nivel de cost de 5: bcrypt va rula hash-ul dvs. 2
la 5
, sau de 32 de ori. Acest lucru poate părea un număr scăzut, dar, din moment ce parametrul de costuri ajustează exponențial funcția, dacă ați schimbat-o la 15, atunci funcția o va executa de 32768 de ori. Nivelul implicit al costului este de 10, dar acesta este configurabil în codul sursă.
Cu teoria în afara, aruncăm o privire la un exemplu complet.
$ pass = "Secret_Password"; $ hash = parola_hash ($ pass, PASSWORD_BCRYPT, array ('cost' => 12, 'sare' => "twenty.two.letter.salt")); dacă password_verify ($ pass, hash)) if (password_needs_rehash ($ hash, PASSWORD_DEFAULT, array ('cost' => 15))) $ hash = 15)); / / Faceți ceva cu hash aici.
password_hash
funcția acceptă trei parametri: cuvântul pentru hash, o constantă pentru algoritmul hashing și o listă opțională de setări, care includ sarea și costul. Următoarea funcție, password_verify
, se asigură că un șir se potrivește cu hash-ul după criptare și, în final, password_needs_rehash
funcția asigură că un hash urmează parametrii dat. De exemplu, în cazul nostru, am setat costul hash la doisprezece, dar, aici, specificăm cincisprezece, deci funcția va reveni Adevărat
, ceea ce înseamnă că trebuie redeschis.
S-ar putea să fi observat că, în password_verify
și password_needs_rehash
funcții, nu este necesar să specificați metoda hashing utilizată, sarea sau costul. Acest lucru se datorează faptului că aceste detalii sunt prefixate la șirul hash.
Sarele sunt folosite pentru a preveni precomprimarea hash-urilor în tabelul curcubeu.
Motivul pentru care este bine să îmbinați costul și sarea împreună cu hash-ul și să nu-l păstrați secret este datorat modului în care sistemul își pune punctele forte împreună. Costul nu trebuie să fie un secret, deoarece este destinat a fi un număr care oferă o sarcină suficientă pentru server. Ceea ce vreau sa spun este ca, chiar daca cineva va face hash-ul si va determina ca nivelul de cost necesita o jumatate de secunda pentru a calcula, el va sti la ce nivel va bruteforce, dar va dura prea mult timp sa crack (de ex. ).
Sărurile sunt folosite pentru a preveni precomprimarea hash-urilor într-o masă de curcubeu.
O masă de curcubeu este în principiu un magazin cu cheie-valoare, cu un "dicționar" de cuvinte, cu tastele lor corespunzătoare ca tastele lor.
Tot ce trebuie să faceți este să precomprimați destule cuvinte comune - sau, mai rău, toate posibilitățile de șir - și apoi pot căuta cuvântul pentru un hash dat instantaneu. Iată un exemplu despre modul în care sărurile pot fi de ajutor: să presupunem că parola dvs. este cuvântul "parolă". În mod normal, acesta este un cuvânt destul de comun; ar fi probabil în masă de curcubeu. Ce face o sare este adăugarea unui șir aleator la parola dvs. astfel încât, în loc de hashing "parola", este într-adevăr hashing "passwordRandomSalt524% # $ &". Acest lucru este considerabil mai puțin probabil să fie pre-calculat.
Deci, de ce sunt sărurile considerate, de obicei, informații private? În mod tradițional, cu lucruri precum MD5 și cum se cuvine, odată ce cineva știe sarea ta, ei se pot întoarce la îndeplinirea tehnicilor bruteforce, cu excepția faptului că vor adăuga sarea ta până la sfârșit. Acest lucru înseamnă că, în loc să vă brutezi șirul de parolă aleatoriu, aceștia brutează o parolă standard mult mai scurtă și doar adaugă sarea. Dar, din fericire, deoarece avem setarea factorului de cost, ar fi nevoie de prea mult timp pentru a calcula fiecare hash cu noua sare.
A recapitula: sărurile se asigură că precompunerea unui hash nu poate fi folosită din nou pe un alt hash, iar parametrul costului asigură că nu este posibil să se calculeze fiecare hash de la zero. Ambele sunt necesare, dar nici unul dintre ele nu trebuie să fie secret.
De aceea funcția le atașează la hash.
Amintiți-vă, nu contează ce este sarea ta, atâta timp cât este unică.
Acum, dacă ați înțeles ce face sarea, atunci ar trebui să știți că este mai bine să lăsați funcția să genereze aleatoriu una singură, decât să introduceți propriul cuvânt. Deși această funcție este furnizată, nu doriți ca toate hash-urile să aibă aceeași sare. Dacă o fac, atunci, dacă cineva a reușit să intre în baza dvs. de date, tot ce ar fi trebuit să facă este să calculeze tabelul o dată. Deoarece vor avea nivelul de sare și de cost, ar putea dura ceva timp, dar, cu suficiente computere, odată ce le procesează, vor fi deblocate toate hashes-urile. Ca atare, este mult mai bine să nu atribuiți unul și, în schimb, permiteți generarea aleatorie de către unul singur.
Până în prezent nu a existat o cale ușoară de trimitere a mesajelor prin SMTP.
cURL este o altă zonă în care echipa PHP a adăugat câteva noi completări și actualizări noi. Începând cu versiunea 5.5, avem acum suport pentru directivele FTP, directive pentru setarea cookie-urilor, directive pentru SSL și conturi și directive pentru protocoalele SMTP și RTSP, printre altele. Ar fi fost nevoie de prea mult timp pentru a discuta despre toate, dar, pentru a vedea lista completă, vă puteți referi la pagina NEWS.
Cu toate acestea, vreau să vorbesc despre un singur set care ma interesat cel mai mult: setul de directive SMTP. Până în prezent nu a existat o cale ușoară de trimitere a mesajelor prin SMTP. Va trebui fie să modificați programul sendmail al serverului dvs. pentru a trimite mesaje prin intermediul unui server SMTP, fie va trebui să descărcați o bibliotecă terță parte - nici una dintre acestea nu este cea mai bună opțiune. Cu noile directive CURL, puteți vorbi direct cu un server SMTP, cum ar fi Gmail, în doar câteva linii scurte.
Pentru a înțelege mai bine modul în care funcționează codul, merită să învățăm puțin despre protocolul SMTP. Ce se întâmplă este că scriptul dvs. se conectează la serverul de poștă electronică, serverul de poștă electronică confirmă conexiunea dvs. și vă returnează informațiile sale (de exemplu, domeniu, software). Apoi trebuie să răspundeți la server cu adresa dvs. Fiind un protocol chat (dar politicos), SMTP vă va saluta, astfel încât să știți că a fost primit.
În acest moment, sunteți gata să trimiteți comenzi. Comenzile necesare sunt MAIL FROM
si RCPT TO
; acestea direcționează direct către directivele cURL, CURLOPT_MAIL_FROM
și CURLOPT_MAIL_RCPT
, respectiv. Ai doar unul din
adresa, dar puteți specifica mai multe la
adrese. Odată ce ați terminat, puteți să apelați comanda, DATE
, și începeți să trimiteți antetele reale ale mesajelor și mesajelor. Pentru a termina transmisia, trebuie să trimiteți o linie necompletată, urmată de o perioadă, urmată de o altă linie necompletată. Aceste ultimele două părți (adică comanda DATA și secvența de încheiere) sunt luate în considerare de cURL, deci nu trebuie să ne facem griji.
Deci, în PHP, tot ce trebuie să faceți este să specificați poșta din
și la
directive, apoi trimiteți mesajul real - toate în cURL. Pentru a face lucrurile foarte simple, voi crea o clasă, numită Gmail
, care va accepta un nume de utilizator / parolă și detaliile mesajului și va trimite e-mailuri prin contul Gmail.
Voi lipi întreaga clasă de mai jos, apoi vom trece prin linia de linie, pentru că majoritatea este plută.
clasa Gmail private $ mail; email privat $; trecere privată $; funcția publică __construct ($ email, $ pass) $ this-> email = $ email; $ this-> pass = $ pass; funcția privată mailGen () $ from = yield; $ to = randament; $ subject = randament; $ body = randament; randament "de la: <" . $from . ">\ n "; randamentul" Către: <" . $to . ">\ n "; randament" ";" \ n "; randament" "; \ n"; randament ""; funcția publică getLine () $ resp = $ this-> mail-> curent (); $ this-> mail-> next (); $ this-> mail = $ this-> mailGen (); $ this-> mail-> trimite ($ this-> email); $ this-> mail-> trimite ($ to); $ this-> mail- > trimite ($ subiect); $ this-> mail-> trimite ($ body); $ ch = curl_init ("smtps: //smtp.gmail.com: 465"<" . $this->e-mail . ">"); curl_setopt ($ ch, CURLOPT_MAIL_RCPT, array ("<" . $to . ">"), curl_setopt ($ ch, CURLOPT_USERNAME, $ this-> email), curl_setopt ($ ch, CURLOPT_PASSWORD, $ this-> pass), curl_setopt ($ ch, CURLOPT_USE_SSL, CURLUSESSL_ALL); , true), opțional dacă doriți să vedeți tranzacția curl_setopt ($ ch, CURLOPT_READFUNCTION, array ($ this, "getLine")); return curl_exec ($ ch);
Sperăm că reacția dvs. la acest cod era ceva de genul: "Wow, asta e scurt pentru o implementare SMTP completă!" Doar în cazul în care pare complicat, vom trece peste el. Începem prin definirea a trei variabile private: una pentru generatorul de mesaje, una pentru a stoca e-mail-ul utilizatorului și una pentru a-și păstra parola. Apoi, avem constructorul, care stochează e-mailul și parola pentru mai târziu; acest lucru este astfel încât să putem trimite mai multe e-mailuri fără a reintroduce acest lucru de fiecare dată. mailGen
funcția este un generator PHP 5.5, care este folosit pentru a trimite mesajul conform protocolului de e-mail direct în cURL. Motivul pentru care acest lucru este necesar se datorează faptului că comanda utilizată în cURL pentru a introduce datele este destinată citirii dintr-un fișier, linie pe linie. Așadar, în loc să avem o variabilă suplimentară pentru a ne aminti ce linie am făcut, am folosit un generator care își salvează poziția.
Următoarea funcție este utilizată pentru ciclism prin intermediul generatorului. Nu putem introduce generatorul direct în cURL; avem nevoie de un intermediar. cURL va continua să apeleze această funcție, până când ajunge la o linie goală. Acesta este motivul pentru care ultima linie din generatorul returnează un șir gol.
Ultima funcție din clasă este cea care leagă toate împreună. Mai întâi inițializăm generatorul la variabila privată definită mai devreme. Apoi, trimiteți generatorului toate informațiile necesare și creați o nouă variabilă cURL. Am discutat deja CURLOPT_MAIL_FROM
și CURLOPT_MAIL_RCPT
; aceștia sunt mapați la comenzile SMTP echivalente. CURLOPT_MAIL_RCPT
este o matrice pentru a putea introduce mai multe adrese. Apoi, trebuie să adăugăm acreditările pentru a vă conecta la GMail. Am lăsat opțiunea verbală acolo; dezactivați-l, dacă doriți să vedeți întreaga tranzacție SMTP. Cele două linii finale au setat doar funcția în care CURL ar trebui să obțină datele pentru mesaj și apoi vom returna rezultatele.
Este un cuplu bun de linii, dar nimic prea complicat. Pentru a utiliza această funcție, creați o nouă instanță a acestei clase și apelați funcția de trimitere. Iată un exemplu de trimitere a două e-mailuri cu aceasta:
$ gmail = noul Gmail ("[email protected]", "parola"); $ gmail-> trimite ("[email protected]", "Subiect de e-mail", "Hello Guy, \ n Ce se întâmplă."); $ gmail-> send ("[email protected]", "Subiect diferit", "Mesaj important");
Pentru a termina acest articol, voi trece peste unele dintre cele mai mici actualizări ale PHP 5.5.
Un lucru destul de cool este suportul adăugat pentru dereferencingul constant al șirului / șirului. Ce înseamnă acest lucru este că puteți accesa caracterele individuale într-un șir static, ca în cazul în care șirul a fost o serie de caractere. Un exemplu rapid al acestui lucru este următorul:
echo "Hello World" [1]; // această linie va econa "e" echo ["una", "două", "trei"] [2]; // acest ecou "trei"
Apoi, avem in cele din urma
cuvinte cheie. Acesta este atașat la sfârșitul unui bloc try / catch; ceea ce face este instruiește PHP că, fie că a fost sau nu încercat sau captură a fost numit, pe care doriți să procesați in cele din urma
secțiune. Acest lucru este bun pentru situații, atunci când doriți să gestionați rezultatul unei declarații de încercare / captură. În loc să repetați codul în ambele, puteți pune partea "riscantă" în blocul de încercare / captură și toată prelucrarea în blocul final.
O altă utilizare care a fost sugerată de creator ca o bună practică este de a pune tot codul de curățare în blocul final. Acest lucru vă va asigura că, de exemplu, nu încercați să închideți același flux de mai multe ori (de exemplu, codul dvs. sa prăbușit și a intrat în blocul de captură după închiderea deja și încercați din nou să îl închideți).
Ultimul lucru care merită menționat este modul în care extensia MySQL va fi depreciată în această nouă versiune. Ar trebui să vă convertiți codul la mysqli
sau DOP
în loc de extensii. Deși de mult timp a fost considerat un model anti-model, este bine ca echipa PHP să o depună oficial.
În timp ce există cu siguranță mai multe actualizări pentru a sapa, elementele din acest articol reprezintă ceea ce simt cel mai important și mai interesant.
Vă mulțumim pentru lectură; Sper că ați învățat puțin! Ca întotdeauna, dacă aveți orice comentarii sau întrebări, intrați în conversația de mai jos și hai să vorbim!