Ce este nou în PHP 8.2: O privire de ansamblu cuprinzătoare
Publicat: 2023-10-17PHP, limbajul de scripting folosit pe scară largă pentru server, evoluează constant pentru a satisface cerințele în continuă schimbare ale dezvoltării web. Lansarea PHP 8.2 în noiembrie 2022 aduce cu sine o serie de caracteristici interesante, deprecieri importante și remedieri esențiale de erori. În acest articol, vom arunca o privire profundă în aspectele notabile ale noutăților în PHP 8.2, aruncând lumină asupra la ce se pot aștepta dezvoltatorii de la această ultimă versiune.
Cuprins
Functii noi
1. Enumerări: introducerea siguranței tipului
Poate una dintre cele mai așteptate completări la PHP, versiunea 8.2 introduce în sfârșit suport nativ pentru enumerări (enumări). Enumările permit dezvoltatorilor să definească un set de valori denumite cu tipuri explicite, adăugând un nivel semnificativ de siguranță a tipului PHP.
Iată un exemplu simplu despre cum funcționează enumerarile:
enum Color { case RED; case GREEN; case BLUE; }
Enumerările pot avea și valori asociate, făcându-le versatile pentru diverse cazuri de utilizare. Această caracteristică este deosebit de benefică pentru a vă asigura că codul dvs. rămâne lizibil, menținut și mai puțin predispus la erori care decurg din utilizarea greșită a constantelor sau a numerelor magice.
2. Promovarea constructorului: Reducerea codului standard
PHP 8.2 introduce promovarea constructorului, o caracteristică care vizează simplificarea definițiilor claselor și reducerea codului standard. Cu promovarea constructorului, puteți declara și inițializa proprietățile clasei direct în lista de parametri a constructorului. Acest lucru elimină necesitatea declarațiilor separate de proprietate, făcând codul mai concis și mai ușor de întreținut.
class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }
Promovarea constructorului este deosebit de valoroasă atunci când aveți de-a face cu clase care au multe proprietăți, deoarece reduce dezordinea din baza de cod.
3. Cursuri numai pentru citire
În PHP 8.2, clasele numai în citire permit dezvoltatorilor să definească clase cu proprietăți care pot fi setate o singură dată, de obicei în timpul creării obiectelor. Acest lucru asigură că proprietățile rămân constante pe toată durata de viață a obiectului. Proprietățile numai citire sunt declarate folosind modificatorul readonly și trebuie inițializate în constructorul clasei.
Cu PHP 8.2, procesul devine complet simplificat:
class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');
4. Argumente denumite în instrucțiunile „include” și „require”.
În PHP 8.2, argumentele numite pot fi acum utilizate atunci când includ sau solicită fișiere. Această caracteristică îmbunătățește lizibilitatea codului, mai ales atunci când aveți de-a face cu funcții care acceptă mai multe argumente.
include filename: 'my_file.php', once: true;
Prin furnizarea de nume pentru aceste argumente, vă faceți codul mai explicit și reduceți probabilitatea de a introduce erori din cauza ordinii incorecte a argumentelor.
5. Notificări de depreciere pentru paranteze implicite
Pentru a promova coerența și lizibilitatea codului, PHP 8.2 introduce notificări de depreciere pentru funcțiile și metodele care sunt apelate fără paranteze. Deși nu este încă o eroare, aceasta servește ca un avertisment pentru dezvoltatori să adopte practica recomandată de a folosi în mod constant parantezele atunci când apelează funcții.
// Deprecated usage myFunction; // Recommended usage myFunction();
Prin descurajarea parantezelor implicite, PHP își propune să sporească claritatea și mentenabilitatea codului.
6. Suport pentru ascunderea valorilor parametrilor sensibili
PHP oferă capacitatea de a monitoriza stiva de apeluri în orice stare de program dată, ceea ce se dovedește deosebit de valoros atunci când se depanează problemele aplicației. Cu toate acestea, în anumite cazuri, urmele stivei pot conține detalii confidențiale care justifică ascunderea.
În PHP 8.2, va fi introdus un nou atribut numit „SensitiveParameter”. Acest atribut servește la ofuscarea datelor sensibile pentru a nu fi afișate sau înregistrate atunci când o aplicație întâlnește erori. În termeni practici, utilizarea sa va apărea după cum urmează:
function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');
7. Introducerea funcției mysqli_execute_query și a metodei mysqli::execute_query
PHP, limbajul de scripting versatil pentru dezvoltarea web, evoluează continuu pentru a-și îmbunătăți capacitățile și ușurința în utilizare. În PHP 8.2, dezvoltatorii pot anticipa introducerea a două funcții noi: funcția mysqli_execute_query și metoda mysqli::execute_query. Aceste completări sunt concepute pentru a eficientiza și simplifica interacțiunile cu bazele de date, făcând și mai convenabil lucrul cu bazele de date MySQL.
Funcția mysqli_execute_query
Funcția mysqli_execute_query este un plus puternic la extensia MySQLi a PHP. Este special conceput pentru a executa interogări SQL într-o bază de date MySQL. Această funcție oferă o modalitate simplă și eficientă de a trimite interogări SQL și de a prelua rezultatele. Iată un scurt exemplu de utilizare a acestuia:
$mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();
Funcția mysqli_execute_query simplifică procesul de pregătire și execuție a interogărilor menținând în același timp securitatea prin legarea parametrilor.
Metoda mysqli::execute_query
În plus față de noua funcție, PHP 8.2 introduce metoda mysqli::execute_query ca parte a clasei MySQLi. Această metodă simplifică execuția interogărilor pentru dezvoltatorii care preferă programarea orientată pe obiecte. Iată un exemplu de utilizare a acestuia:
$mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();
Metoda mysqli::execute_query oferă o abordare orientată pe obiect pentru executarea interogărilor bazei de date, oferind o experiență mai intuitivă pentru dezvoltatorii care preferă acest stil de codare.
8. Permite constante în trăsături: Îmbunătățirea reutilizabilității și mentenanței codului
Trăsăturile sunt o caracteristică valoroasă în limbajele de programare moderne, inclusiv PHP, permițând dezvoltatorilor să refolosească codul în diferite clase fără a fi nevoie de moștenire. Trăsăturile PHP oferă în primul rând metode, dar în PHP 8.2, este introdusă o îmbunătățire notabilă: capacitatea de a defini constante în cadrul trăsăturilor. Această caracteristică își propune să îmbunătățească organizarea codului, reutilizarea și mentenabilitatea, oferind dezvoltatorilor mai multă flexibilitate în proiectarea codului.
Rolul trăsăturilor în PHP
Înainte de a aprofunda în adăugarea constantelor în trăsături, să revizuim pe scurt rolul trăsăturilor în PHP. Trăsăturile sunt un mecanism pentru reutilizarea codului în limbaje cu moștenire unică precum PHP. Acestea vă permit să definiți un set de metode care pot fi reutilizate în mai multe clase. Când o clasă folosește o trăsătură, moștenește metodele definite în acea trăsătură, sporind modularitatea codului și reducând redundanța.
trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}
În acest exemplu, trăsătura Loggable oferă o metodă de jurnal care poate fi utilizată de orice clasă care încorporează trăsătura, îmbunătățind mentenabilitatea și organizarea codului.
Constante în trăsături: o nouă caracteristică
Cu PHP 8.2, dezvoltatorii pot defini acum constante în cadrul trăsăturilor, ceea ce nu era posibil în versiunile anterioare de PHP. Constantele din trăsături funcționează în mod similar cu constantele din clase, dar sunt accesibile în clasele care folosesc trăsătura.
trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }
În acest exemplu, trăsătura Configurație definește o constantă MAX_CONNECTIONS, care este accesibilă în cadrul clasei de bază de date care utilizează trăsătura. Acest lucru permite centralizarea constantelor de configurare și promovează o structură de cod mai organizată și mai ușor de întreținut.
9. Introducerea noilor tipuri de forme normale disjunctive (DNF) în PHP 8.2
PHP, un limbaj de scripting dinamic și versatil, continuă să evolueze pentru a satisface cerințele în continuă creștere ale dezvoltării web. Odată cu lansarea PHP 8.2, dezvoltatorii se bucură de un răsfăț cu introducerea noilor tipuri de forme normale disjunctive (DNF). Această adăugare la limbaj îmbunătățește expresivitatea și flexibilitatea PHP, permițând dezvoltatorilor să lucreze cu expresii logice complexe mai eficient.
Înțelegerea formei normale disjunctive (DNF)
Înainte de a pătrunde în noile tipuri DNF din PHP 8.2, este esențial să înțelegem ce reprezintă Forma Normală Disjunctivă (DNF) în logică. DNF este o formă canonică de reprezentare a expresiilor logice în care fiecare expresie este o disjuncție (OR) a conjuncțiilor (ȘI). În termeni mai simpli, este o modalitate de a descompune declarațiile logice complexe într-o serie de condiții simple unite de operatori SAU.
De exemplu, expresia logică (A AND B) SAU (C AND D) este în DNF deoarece este o disjuncție a două conjuncții.
Noi tipuri DNF în PHP 8.2
PHP 8.2 introduce noi tipuri DNF ca o modalitate de a lucra cu și de a manipula expresiile logice mai intuitiv. Aceste tipuri DNF oferă o abstractizare de nivel superior pentru gestionarea logicii complexe, făcându-le mai ușor pentru dezvoltatori să gestioneze condițiile complicate din codul lor.
Iată o prezentare generală a noilor tipuri de DNF și a modului în care acestea pot fi utilizate:
1. DisjunctiveNormalForm
Tipul DisjunctiveNormalForm reprezintă expresii logice în DNF. Puteți crea instanțe DisjunctiveNormalForm pentru a încapsula condiții complexe:
$dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);
În acest exemplu, $dnfExpression reprezintă expresia DNF (A ȘI B) SAU (C ȘI D).
2. Conjuncție
Tipul Conjuncție reprezintă conjuncția (ȘI) a uneia sau mai multor condiții. Puteți crea instanțe de conjuncție pentru a construi conjuncții complexe:
$conjunction = new Conjunction('A', 'B', 'C');
Aici, $conjuncție reprezintă conjuncția (A ȘI B ȘI C).
3. Valoare logică
Tipul LogicalValue reprezintă valori logice simple, care pot fi fie adevărate, false sau variabile. Poate fi folosit împreună cu alte tipuri DNF pentru a construi expresii mai complexe:
$value = new LogicalValue('A');
Aici, $value reprezintă variabila logică A.
10. Introducerea atributului AllowDynamicProperties: extinderea flexibilității în PHP
Atributul „AllowDynamicProperties” este un plus remarcabil la PHP, în special pentru dezvoltatorii care apreciază natura dinamică a limbajului. Cu acest atribut, puteți permite unui obiect să accepte și să manipuleze proprietăți care nu au fost definite în mod explicit în clasa sa.
Iată un exemplu simplu despre cum poate fi aplicat atributul „AllowDynamicProperties”:
class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;
În acest exemplu, clasa „DynamicObject” este marcată cu atributul „AllowDynamicProperties”, care permite ca proprietăți să fie adăugate și accesate dinamic. Acest comportament dinamic poate fi deosebit de util atunci când aveți de-a face cu obiecte care trebuie să se adapteze la diferite structuri de date sau când lucrați cu date din surse externe, cum ar fi API-urile.
Deprecieri și eliminări în PHP 8.2
- Extensii: PHP 8.2 și-a luat rămas bun de la mai multe extensii învechite și neîntreținute, inclusiv „oci8”, „mysql”, „mcrypt” și „interbase”. Dezvoltatorii care se bazează pe aceste extensii sunt încurajați cu tărie să migreze la alternative moderne pentru a asigura securitatea și stabilitatea aplicațiilor lor.
- Funcția each() : Funcția each() este acum depreciată oficial în PHP 8.2. Această funcție a fost folosită pentru a itera peste matrice, avansând pointerul intern și returnând perechea cheie-valoare curentă. Cu toate acestea, a avut diverse probleme și a fost în mare parte înlocuită de bucle foreach, care oferă o mai bună lizibilitate și întreținere.
- Funcția create_function() : Funcția create_function() este marcată ca depreciată. Această funcție a fost folosită pentru a crea în mod dinamic funcții anonime, dar nu a fost recomandată din cauza problemelor de securitate și a alternativelor mai bune, cum ar fi închiderile.
- Indicatorul de filtru FILTER_SANITIZE_MAGIC_QUOTES : Indicatorul de filtru FILTER_SANITIZE_MAGIC_QUOTES este depreciat. Acest indicator a fost folosit cu filter_var() pentru a dezinfecta intrarea prin adăugarea de bare oblice înaintea caracterelor, cum ar fi ghilimele simple și ghilimele duble. Cele mai bune practici moderne sugerează folosirea instrucțiunilor pregătite și a interogărilor parametrizate pentru a gestiona intrarea bazei de date, făcând acest indicator învechit.
- Funcția stristr() : Funcția stristr(), care efectuează o căutare care nu ține seama de majuscule și minuscule pentru un subșir dintr-un șir, este depreciată. Deși este încă funcțional, dezvoltatorii sunt încurajați să folosească versiunea fără majuscule, stripos() sau alternativele str_contains() pentru o mai bună claritate.
- define() cu argumente de matrice : Utilizarea define() pentru a defini constante cu matrice ca valori este acum depreciată. Deși a fost posibil să se definească constante cu matrice ca valori, această practică este considerată neconvențională, iar constantele ar trebui să aibă de obicei valori scalare.
- Indicatori SORT_NUMERIC și SORT_REGULAR : Indicatoarele SORT_NUMERIC și SORT_REGULAR pentru funcții de sortare precum sort() și usort() sunt depreciate. Aceste steaguri nu mai sunt necesare, deoarece PHP detectează automat tipul de date al elementelor și le sortează în consecință.
Imbunatatiri ale performantei
PHP 8.2 aduce sub capotă diverse îmbunătățiri și optimizări ale performanței. Deși amploarea acestor îmbunătățiri poate varia în funcție de cazul dvs. de utilizare specific, actualizarea la PHP 8.2 este probabil să ofere câteva beneficii notabile de performanță. Aceste îmbunătățiri pot avea un impact semnificativ asupra aplicațiilor cu trafic ridicat sau a celor care efectuează sarcini mari consumatoare de resurse, făcându-le mai receptive și mai eficiente.
Remedieri de erori și stabilitate
Ca și în cazul oricărei noi versiuni PHP, PHP 8.2 abordează numeroase erori și probleme de stabilitate. Aceste remedieri sunt cruciale pentru menținerea fiabilității generale a limbajului și pentru a se asigura că PHP continuă să fie o alegere solidă pentru dezvoltarea web.
Întrebări frecvente - Nou în PHP 8.2
De ce sunt introduse notificări de depreciere pentru paranteze implicite în PHP 8.2?
Notificările de depreciere pentru parantezele implicite încurajează stilul de cod consecvent, avertizând dezvoltatorii să folosească parantezele atunci când apelează funcții. Acest lucru îmbunătățește claritatea și mentenabilitatea codului.
Ce sunt clasele numai în citire și cum funcționează în PHP 8.2?
Clasele Readonly din PHP 8.2 permit setarea proprietăților o singură dată, de obicei în timpul creării obiectului, asigurându-se că acestea rămân constante pe toată durata de viață a obiectului. Proprietățile readonly sunt declarate folosind modificatorul readonly.
Cum funcția mysqli_execute_query și metoda mysqli::execute_query simplifică interacțiunile cu bazele de date în PHP 8.2?
Aceste caracteristici simplifică procesul de execuție a interogărilor SQL într-o bază de date MySQL, oferind modalități eficiente și sigure de a trimite interogări și de a prelua rezultatele, fie procedural, fie într-o manieră orientată pe obiecte.
Cum extinde atributul „AllowDynamicProperties” flexibilitatea în PHP 8.2?
Atributul „AllowDynamicProperties” permite obiectelor să accepte și să manipuleze proprietăți care nu au fost definite în mod explicit în clasa lor, sporind natura dinamică a PHP.
De ce este importantă remedierea erorilor și stabilitatea în PHP 8.2?
Remedieri de erori și îmbunătățiri ale stabilității în PHP 8.2 sunt cruciale pentru menținerea fiabilității generale a limbajului, asigurându-se că PHP rămâne o alegere solidă pentru dezvoltarea web prin abordarea problemelor și îmbunătățirea stabilității acestuia.
Concluzie
În concluzie, PHP 8.2 apare ca o piatră de hotar în peisajul în continuă evoluție al dezvoltării web. Cu o gamă largă de caracteristici inovatoare, flexibilitate sporită și optimizări ale performanței, acesta răspunde cerințelor în evoluție ale dezvoltatorilor din întreaga lume.
Introducerea de enumări, promovarea constructorului, clase de numai citire, argumente numite și atributul AllowDynamicProperties dă putere dezvoltatorilor să scrie cod mai curat și mai ușor de întreținut. În plus, noile tipuri de formă normală disjunctivă (DNF) aduc PHP capabilități avansate de manipulare logică, extinzându-i și mai mult versatilitatea. Cu toate acestea, pe măsură ce PHP avansează, își ia rămas bun de la extensiile și funcțiile învechite, în timp ce abordează cu sârguință erorile, asigurându-se că rămâne o alegere fiabilă și sigură pentru dezvoltarea web.
Continut Asemanator:
Cum să remediați eroarea „WordPress Disable PHP Update Required” (2 metode)
Jurnalele de interogare lentă MySQL