Novità di PHP 8.2: una panoramica completa

Pubblicato: 2023-10-17
Condividi sui profili social.

PHP, il linguaggio di scripting lato server ampiamente utilizzato, è in continua evoluzione per soddisfare le mutevoli esigenze dello sviluppo web. Il rilascio di PHP 8.2 nel novembre 2022 porta con sé una serie di funzionalità interessanti, importanti deprecazioni e correzioni di bug cruciali. In questo articolo approfondiremo gli aspetti più importanti delle novità di PHP 8.2, facendo luce su ciò che gli sviluppatori possono aspettarsi da quest'ultima versione.

Sommario

Nuove caratteristiche

1. Enumerazioni: introduzione alla sicurezza dei tipi

Forse una delle aggiunte più attese a PHP, la versione 8.2 introduce finalmente il supporto nativo per le enumerazioni (enumerazioni). Le enumerazioni consentono agli sviluppatori di definire un insieme di valori denominati con tipi espliciti, aggiungendo un livello significativo di sicurezza dei tipi a PHP.

Ecco un semplice esempio di come funzionano le enumerazioni:

 enum Color { case RED; case GREEN; case BLUE; }

Le enumerazioni possono anche avere valori associati, rendendole versatili per vari casi d'uso. Questa funzionalità è particolarmente utile per garantire che il codice rimanga leggibile, gestibile e meno soggetto a bug derivanti dall'uso improprio di costanti o numeri magici.

2. Promozione del costruttore: riduzione del codice boilerplate

PHP 8.2 introduce la promozione del costruttore, una funzionalità volta a semplificare le definizioni di classe e ridurre il codice standard. Con la promozione del costruttore, puoi dichiarare e inizializzare le proprietà della classe direttamente nell'elenco dei parametri del costruttore. Ciò elimina la necessità di dichiarazioni di proprietà separate, rendendo il codice più conciso e più semplice da gestire.

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

La promozione del costruttore è particolarmente utile quando si ha a che fare con classi che hanno molte proprietà, poiché riduce la confusione nella codebase.

3. Classi di sola lettura

In PHP 8.2, le classi di sola lettura consentono agli sviluppatori di definire classi con proprietà che possono essere impostate solo una volta, in genere durante la creazione dell'oggetto. Ciò garantisce che le proprietà rimangano costanti per tutta la durata dell'oggetto. Le proprietà di sola lettura vengono dichiarate utilizzando il modificatore readonly e devono essere inizializzate nel costruttore della classe.

Con PHP 8.2, il processo viene completamente semplificato:

 class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

4. Argomenti con nome nelle istruzioni "include" e "require".

In PHP 8.2, gli argomenti con nome possono ora essere utilizzati quando si includono o si richiedono file. Questa funzionalità migliora la leggibilità del codice, soprattutto quando si ha a che fare con funzioni che accettano più argomenti.

 include filename: 'my_file.php', once: true;

Fornendo nomi per questi argomenti, rendi il tuo codice più autoesplicativo e riduci la probabilità di introdurre errori dovuti all'ordine errato degli argomenti.

5. Avvisi di deprecazione per parentesi implicite

Per promuovere la coerenza e la leggibilità del codice, PHP 8.2 introduce avvisi di deprecazione per funzioni e metodi chiamati senza parentesi. Sebbene non si tratti ancora di un errore, ciò serve da avvertimento agli sviluppatori affinché adottino la pratica consigliata di utilizzare in modo coerente le parentesi quando si chiamano le funzioni.

 // Deprecated usage myFunction; // Recommended usage myFunction();

Scoraggiando le parentesi implicite, PHP mira a migliorare la chiarezza e la manutenibilità del codice.

6. Supporto per nascondere i valori dei parametri sensibili

PHP offre la possibilità di monitorare lo stack di chiamate in qualsiasi stato del programma, il che si rivela particolarmente utile durante la risoluzione dei problemi dell'applicazione. Tuttavia, in alcuni casi, le analisi dello stack possono contenere dettagli riservati che richiedono l'occultamento.

In PHP 8.2 verrà introdotto un nuovo attributo denominato "SensitiveParameter". Questo attributo serve a nascondere la visualizzazione o la registrazione dei dati sensibili quando un'applicazione rileva errori. In termini pratici, il suo utilizzo apparirà come segue:

 function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

7. Introduzione alla funzione mysqli_execute_query e al metodo mysqli::execute_query

PHP, il versatile linguaggio di scripting per lo sviluppo web, si evolve continuamente per migliorare le sue capacità e la sua facilità d'uso. In PHP 8.2, gli sviluppatori possono anticipare l'introduzione di due nuove funzionalità: la funzione mysqli_execute_query e il metodo mysqli::execute_query. Queste aggiunte sono progettate per ottimizzare e semplificare le interazioni con i database, rendendo ancora più conveniente lavorare con i database MySQL.

Funzione mysqli_execute_query

La funzione mysqli_execute_query è una potente aggiunta all'estensione MySQLi di PHP. È specificamente progettato per eseguire query SQL su un database MySQL. Questa funzione offre un modo semplice ed efficiente per inviare query SQL e recuperare i risultati. Ecco un breve esempio del suo utilizzo:

 $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();

La funzione mysqli_execute_query semplifica il processo di preparazione ed esecuzione delle query mantenendo la sicurezza tramite l'associazione dei parametri.

Metodo mysqli::execute_query

Oltre alla nuova funzione, PHP 8.2 introduce il metodo mysqli::execute_query come parte della classe MySQLi. Questo metodo semplifica l'esecuzione delle query per gli sviluppatori che preferiscono la programmazione orientata agli oggetti. Ecco un esempio del suo utilizzo:

 $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();

Il metodo mysqli::execute_query offre un approccio orientato agli oggetti per l'esecuzione di query sul database, fornendo un'esperienza più intuitiva per gli sviluppatori che preferiscono questo stile di codifica.

8. Consenti costanti nei tratti: miglioramento della riusabilità e della manutenibilità del codice

I tratti sono una caratteristica preziosa nei linguaggi di programmazione moderni, incluso PHP, poiché consentono agli sviluppatori di riutilizzare il codice in classi diverse senza la necessità di ereditarietà. I tratti PHP forniscono principalmente metodi, ma in PHP 8.2 viene introdotto un notevole miglioramento: la capacità di definire costanti all'interno dei tratti. Questa funzionalità mira a migliorare l'organizzazione, la riusabilità e la manutenibilità del codice, offrendo agli sviluppatori maggiore flessibilità nella progettazione del codice.

Il ruolo dei tratti in PHP

Prima di approfondire l'aggiunta di costanti nei tratti, rivisitiamo brevemente il ruolo dei tratti in PHP. I tratti sono un meccanismo per il riutilizzo del codice in linguaggi con ereditarietà singola come PHP. Permettono di definire un insieme di metodi che possono essere riutilizzati in più classi. Quando una classe utilizza un tratto, eredita i metodi definiti in quel tratto, migliorando la modularità del codice e riducendo la ridondanza.

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

In questo esempio, il tratto Loggable fornisce un metodo di log che può essere utilizzato da qualsiasi classe che incorpora il tratto, migliorando la manutenibilità e l'organizzazione del codice.

Costanti nei tratti: una nuova caratteristica

Con PHP 8.2, gli sviluppatori possono ora definire costanti all'interno dei tratti, cosa non possibile nelle versioni precedenti di PHP. Le costanti nei tratti funzionano in modo simile alle costanti nelle classi, ma sono accessibili nelle classi che utilizzano il tratto.

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

In questo esempio, la caratteristica Configuration definisce una costante MAX_CONNECTIONS, accessibile all'interno della classe Database che utilizza la caratteristica. Ciò consente la centralizzazione delle costanti di configurazione e promuove una struttura del codice più organizzata e gestibile.

9. Introduzione dei nuovi tipi di forma normale disgiuntiva (DNF) in PHP 8.2

PHP, un linguaggio di scripting dinamico e versatile, continua ad evolversi per soddisfare le crescenti esigenze dello sviluppo web. Con il rilascio di PHP 8.2, gli sviluppatori hanno una sorpresa con l'introduzione di nuovi tipi di forma normale disgiuntiva (DNF). Questa aggiunta al linguaggio migliora l'espressività e la flessibilità di PHP, consentendo agli sviluppatori di lavorare con espressioni logiche complesse in modo più efficace.

Comprendere la forma normale disgiuntiva (DNF)

Prima di approfondire i nuovi tipi DNF in PHP 8.2, è essenziale capire cosa rappresenta in logica la forma normale disgiuntiva (DNF). DNF è una forma canonica di rappresentazione delle espressioni logiche in cui ciascuna espressione è una disgiunzione (OR) di congiunzioni (AND). In termini più semplici, è un modo per scomporre istruzioni logiche complesse in una serie di condizioni semplici unite da operatori OR.

Ad esempio, l'espressione logica (A AND B) OR (C AND D) è in DNF perché è una disgiunzione di due congiunzioni.

Nuovi tipi DNF in PHP 8.2

PHP 8.2 introduce nuovi tipi DNF come modo per lavorare e manipolare le espressioni logiche in modo più intuitivo. Questi tipi DNF forniscono un'astrazione di livello superiore per la gestione della logica complessa, rendendo più semplice per gli sviluppatori gestire condizioni complesse nel loro codice.

Ecco una panoramica dei nuovi tipi DNF e di come possono essere utilizzati:

1. Forma DisgiuntivaNormale

Il tipo DisconnectiveNormalForm rappresenta espressioni logiche in DNF. Puoi creare istanze DisconnectiveNormalForm per incapsulare condizioni complesse:

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

In questo esempio, $dnfExpression rappresenta l'espressione DNF (A AND B) OR (C AND D).

2. Congiunzione

Il tipo Congiunzione rappresenta la congiunzione (AND) di una o più condizioni. Puoi creare istanze di Congiunzione per creare congiunzioni complesse:

 $conjunction = new Conjunction('A', 'B', 'C');

Qui, $congiunzione rappresenta la congiunzione (A AND B AND C).

3. Valore Logico

Il tipo LogicalValue rappresenta valori logici semplici, che possono essere true, false o una variabile. Può essere utilizzato insieme ad altri tipi DNF per creare espressioni più complesse:

 $value = new LogicalValue('A');

Qui, $value rappresenta la variabile logica A.

10. Presentazione dell'attributo EnableDynamicProperties: espansione della flessibilità in PHP

L'attributo "AllowDynamicProperties" è un'aggiunta notevole a PHP, soprattutto per gli sviluppatori che apprezzano la natura dinamica del linguaggio. Con questo attributo puoi consentire a un oggetto di accettare e manipolare proprietà che non sono state definite esplicitamente all'interno della sua classe.

Ecco un semplice esempio di come può essere applicato l'attributo "AllowDynamicProperties":

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

In questo esempio, la classe "DynamicObject" è contrassegnata con l'attributo "AllowDynamicProperties", che consente l'aggiunta e l'accesso dinamico alle proprietà. Questo comportamento dinamico può essere particolarmente utile quando si ha a che fare con oggetti che devono adattarsi a varie strutture dati o quando si lavora con dati provenienti da fonti esterne, come le API.

Deprecazioni e rimozioni in PHP 8.2

  • Estensioni: PHP 8.2 ha detto addio a diverse estensioni obsolete e non mantenute, tra cui "oci8", "mysql", "mcrypt" e "interbase". Gli sviluppatori che fanno affidamento su queste estensioni sono fortemente incoraggiati a migrare verso alternative moderne per garantire la sicurezza e la stabilità delle loro applicazioni.
  • Funzione Each() : la funzione Each() è ora ufficialmente deprecata in PHP 8.2. Questa funzione veniva utilizzata per scorrere gli array facendo avanzare il puntatore interno e restituendo la coppia chiave-valore corrente. Tuttavia, presentava vari problemi ed è stato in gran parte sostituito dai cicli foreach, che offrono una migliore leggibilità e manutenibilità.
  • Funzione create_function() : la funzione create_function() è contrassegnata come deprecata. Questa funzione è stata utilizzata per creare dinamicamente funzioni anonime, ma non era consigliata a causa di problemi di sicurezza e di alternative migliori come le chiusure.
  • Flag filtro FILTER_SANITIZE_MAGIC_QUOTES : il flag filtro FILTER_SANITIZE_MAGIC_QUOTES è deprecato. Questo flag è stato utilizzato con filter_var() per pulire l'input aggiungendo barre prima di caratteri come virgolette singole e doppie. Le migliori pratiche moderne suggeriscono di utilizzare istruzioni preparate e query parametrizzate per gestire l'input del database, rendendo questo flag obsoleto.
  • Funzione stristr() : la funzione stristr(), che esegue una ricerca senza distinzione tra maiuscole e minuscole per una sottostringa in una stringa, è deprecata. Sebbene sia ancora funzionante, gli sviluppatori sono incoraggiati a utilizzare la versione senza distinzione tra maiuscole e minuscole, stripos(), o le alternative str_contains() per una maggiore chiarezza.
  • define() con argomenti di array : l'utilizzo di define() per definire costanti con array come valori è ora deprecato. Sebbene fosse possibile definire costanti con matrici come valori, questa pratica è considerata non convenzionale e le costanti dovrebbero in genere avere valori scalari.
  • Flag SORT_NUMERIC e SORT_REGULAR : i flag SORT_NUMERIC e SORT_REGULAR per funzioni di ordinamento come sort() e usort() sono deprecati. Questi flag non sono più necessari, poiché PHP rileva automaticamente il tipo di dati degli elementi e li ordina di conseguenza.

Miglioramenti delle prestazioni

PHP 8.2 porta vari miglioramenti e ottimizzazioni delle prestazioni sotto il cofano. Sebbene la portata di questi miglioramenti possa variare a seconda del caso d'uso specifico, è probabile che l'aggiornamento a PHP 8.2 offra notevoli vantaggi in termini di prestazioni. Questi miglioramenti possono avere un impatto significativo sulle applicazioni con traffico elevato o su quelle che eseguono attività ad uso intensivo di risorse, rendendole più reattive ed efficienti.

Correzioni di bug e stabilità

Come ogni nuova versione di PHP, PHP 8.2 risolve numerosi bug e problemi di stabilità. Queste correzioni sono cruciali per mantenere l’affidabilità complessiva del linguaggio e garantire che PHP continui a essere una scelta solida per lo sviluppo web.

Domande frequenti - Novità in PHP 8.2

Perché sono stati introdotti avvisi di deprecazione per le parentesi implicite in PHP 8.2?

Gli avvisi di deprecazione per le parentesi implicite incoraggiano uno stile di codice coerente avvisando gli sviluppatori di utilizzare le parentesi quando chiamano le funzioni. Ciò migliora la chiarezza e la manutenibilità del codice.

Cosa sono le classi di sola lettura e come funzionano in PHP 8.2?

Le classi di sola lettura in PHP 8.2 consentono di impostare le proprietà una sola volta, in genere durante la creazione dell'oggetto, garantendo che rimangano costanti per tutta la vita dell'oggetto. Le proprietà di sola lettura vengono dichiarate utilizzando il modificatore readonly.

In che modo la funzione mysqli_execute_query e il metodo mysqli::execute_query semplificano le interazioni del database in PHP 8.2?

Queste funzionalità semplificano il processo di esecuzione delle query SQL su un database MySQL, fornendo modi efficienti e sicuri per inviare query e recuperare risultati, sia proceduralmente che in modo orientato agli oggetti.

In che modo l'attributo "AllowDynamicProperties" espande la flessibilità in PHP 8.2?

L'attributo "AllowDynamicProperties" consente agli oggetti di accettare e manipolare proprietà che non sono state esplicitamente definite all'interno della loro classe, migliorando la natura dinamica di PHP.

Perché la correzione dei bug e la stabilità sono importanti in PHP 8.2?

Le correzioni di bug e i miglioramenti della stabilità in PHP 8.2 sono fondamentali per mantenere l'affidabilità complessiva del linguaggio, garantendo che PHP rimanga una scelta solida per lo sviluppo web risolvendo i problemi e migliorandone la stabilità.

Conclusione

In conclusione, PHP 8.2 emerge come una pietra miliare fondamentale nel panorama in continua evoluzione dello sviluppo web. Con un'ampia gamma di funzionalità innovative, maggiore flessibilità e ottimizzazioni delle prestazioni, soddisfa le esigenze in evoluzione degli sviluppatori di tutto il mondo.

L'introduzione di enumerazioni, promozione del costruttore, classi di sola lettura, argomenti denominati e l'attributo EnableDynamicProperties consente agli sviluppatori di scrivere codice più pulito e facilmente gestibile. Inoltre, i nuovi tipi di forma normale disgiuntiva (DNF) apportano funzionalità avanzate di manipolazione logica a PHP, espandendone ulteriormente la versatilità. Tuttavia, con l’avanzare di PHP, dice addio anche alle estensioni e alle funzioni obsolete, affrontando diligentemente i bug, garantendo che rimanga una scelta affidabile e sicura per lo sviluppo web.

Contenuto relativo:

Come correggere l'errore "WordPress Disabilita PHP aggiornamento richiesto" (2 metodi)

Registri delle query lente di MySQL