Alcuni miglioramenti di PHP versione 8
- 24-07-2022
- Toanngo92
- 0 Comments
PHP 8.0 è stato rilasciato il 26 novembre 2020. Queste modifiche rendono PHP più semplice e semplice da utilizzare. PHP 8.0 è considerato un importante aggiornamento del linguaggio PHP. Ha molte nuove funzionalità e ottimizzazioni tra cui:
- Argomenti nominati
- Attributi
- Promozione della proprietà del costruttore
- Tipi di unione
- Espressione di corrispondenza
- Operatore Nullsafe
- Gestione degli errori e sistema di digitazione migliorati
- Consistenza
Mục lục
Argomenti denominati (argomenti denominati)
In questa nuova funzionalità, gli utenti devono solo specificare i parametri richiesti e omettere i parametri facoltativi. Gli argomenti sono autodocumentati e non dipendono dall'ordinamento.
Esempio di differenza tra PHP 7.0 e 8.0
PHP 7 | PHP 8 |
htmlspecialchars($stringa, ENT_COMPATCT | ENT HTML401, 'UTF-8',false); | htmlspecialchars($stringa, doppia codifica: false); |
Attributi (attributi)
Gli utenti possono ora utilizzare metadati strutturati con la sintassi nativa di PHP, invece dei commenti ai documenti PHP.
PHP 7.0 | PHP 8.0 |
classe Postcontroller{ /** * @Route("api/posts/{id}"),methods={"GET"} */ funzione pubblica get($id){ // da fare } } | classe PostsController{ #[Route("api/posts/{id}", ,methods: ["GET"])] funzione pubblica get($id){ // da fare } } |
Promozione della proprietà del costruttore (introduzione all'inizializzazione degli oggetti)
C'è un accorciamento del codice sorgente durante la definizione e l'inizializzazione delle proprietà per gli oggetti.
PHP 7.0 | PHP 8.0 |
punto di classe{ galleggiante pubblico $x; flottante pubblico $y; galleggiante pubblico $z; funzione pubblica __construct( float $ x = 0,0, float $y = 0,0, float $z = 0,0 ){ $questo->x = $x; $questo->y = $y; $questo->z = $z; // da fare } } | punto di classe{ funzione pubblica __construct( float pubblico $x = 0,0, float pubblico $y = 0,0, float pubblico $z = 0,0 ){ //da fare } } |
Tipi di unione (combinazione di tipi di dati)
Gli utenti possono utilizzare dichiarazioni di tipo associativo nativo convalidate in fase di esecuzione, invece delle annotazioni di PHP Docs.
PHP 7 | PHP 8 |
numero di classe{ /** @var int|flottante */ numero privato; /** * @param float|int $numero */ funzione pubblica __construct($numero){ $questo->numero = $numero; } } nuovo Numero('NaN'); // il suo lavoro | numero di classe { funzione pubblica __construct(private int|float $numero){ // da fare } } nuovo Numero('NaN'); // errore di digitazione |
Espressione di corrispondenza (espressioni di corrispondenza)
La corrispondenza delle espressioni in PHP 8.0 è simile alla conversione con le seguenti caratteristiche:
- Una corrispondenza è un'espressione, il che significa che il suo risultato può essere archiviato in una variabile o può essere restituito.
- I rami corrispondenti supportano solo espressioni a riga singola e non richiedono un'istruzione break; .
- Il confronto non si confronta rigorosamente.
PHP 7 | PHP 8 |
<?php interruttore(8.0){ caso '8.0': $risultato = '8.0'; rompere; caso 8.0; $risultato = '8.0 previsto'; rompere; } eco $risultato; // 8.0 | corrispondenza eco(8.0){ '8.0' => '8.0', 8.0 => '8.0 previsto', }; // 8.0 esclusa |
Operatore Null Safe
L'utente può utilizzare una serie (catena) di chiamate con il nuovo operatore null-safe invece di
scrivi il codice per le condizioni che controllano null.
L'intera esecuzione viene interrotta quando l'identificazione di un elemento nella sequenza fallisce e, successivamente, l'intera catena è nulla.
PHP 7 | PHP 8 |
$paese = nullo; if($sessione!==null){ $utente = $sessione->utente; if($utente!==null){ $indirizzo = $utente->getAddress(); } if($indirizzo !==null){ $paese = $indirizzo->paese; } } | $paese = $sessione?->utente?->getAddress()?->paese; |
Sistema di gestione e tipo degli errori migliorato
Ci sono stati molti cambiamenti in diversi tipi di sistemi e una migliore gestione degli errori come segue:
- Controllo del tipo più rigoroso per gli operatori aritmetici/bit per bit rispetto alla versione precedente
- Validazione del metodo dei tratti astratti
- I metodi magici ora hanno firme corrette.
- Il motore di avviso è stato riclassificato
- Il metodo incompatibile causa un errore irreversibile
- Ereditarietà con metodi privati
- Tipo misto
- Tipo di ritorno statico
- Usa oggetti opachi invece di risorse per OpenSSL, GD, Curl,
Scrittore XML, socket ed estensioni XML
Coerenza (coerenza)
PHP 8.0 ha un errore di coerenza per le funzioni interne. La maggior parte delle funzioni interne genera un'eccezione Error quando i parametri non possono essere convalidati.
Compilatore Just In Time (JIT).
In quanto linguaggio interpretato o interpretato, PHP, una volta compilato, non viene eseguito immediatamente all'avvio. Funziona in tempo reale. Nelle versioni precedenti di PHP, durante la compilazione, ogni volta che veniva eseguito il codice PHP, l'interprete doveva prima interpretare, poi compilare e infine eseguire il codice. Questo viene fatto ripetutamente per ogni richiesta, con conseguente rallentamento dell'esecuzione del codice e spreco di risorse della CPU.
Questo problema è stato ora risolto con l'introduzione del compilatore Just In Time (JIT), in PHP 8.0.
Il compilatore JIT consente agli utenti di compilare un programma in codice macchina appena prima che possa essere eseguito. Poiché JIT salta la fase di compilazione, fornisce flessibilità nel codice PHP e offre miglioramenti di vasta portata nell'esecuzione del codice, nell'utilizzo della memoria e nelle prestazioni. Tuttavia, questi miglioramenti si applicano solo ai calcoli matematici o numerici, non alle normali applicazioni Web PHP. JIT è ampiamente utilizzato nei programmi che prevedono lunghi cicli di esecuzione come il rendering 3D, l'analisi dei dati o l'intelligenza artificiale.
PHP 8.0 introduce due strumenti di compilazione JIT, ovvero Tracing JIT e Function JIT.
Tracing JIT è il più sicuro dei due. Su benchmark sintetici, ha prestazioni tre volte migliori. Inoltre, sono stati apportati due miglioramenti a specifiche applicazioni a esecuzione prolungata.