PHP 8.2: Cosa Aspettarsi (Guida per Sviluppatori – Aggiornata)

Pubblicato: di Jason Cosper
PHP 8.2: Cosa Aspettarsi (Guida per Sviluppatori – Aggiornata) thumbnail

Si prevede che PHP 8.2 sarà rilasciato a novembre di quest’anno, con la versione stabile più recente che è PHP 8.1.5. Anche se è ancora presto nel processo, c’è stata un’accoglienza mista riguardo a PHP 8.2 e la compatibilità con il core di WordPress, plugin e temi.

Tuttavia, sapere cosa aspettarsi può aiutarti a prepararti per l’ultima versione di PHP. Imparando sulle nuove funzionalità e quelle che verranno deprecate, puoi capire come l’aggiornamento potrebbe influenzare lo sviluppo. Questa conoscenza può anche aiutarti a prepararti per il rilascio finale.

In questo post, faremo un riassunto delle versioni più recenti di PHP. Poi, parleremo delle novità in PHP 8.2 e discuteremo del calendario di rilascio. Saltiamo dentro!

Panoramica delle Versioni di PHP

PHP è il principale linguaggio di programmazione di WordPress. Gioca un ruolo fondamentale nella conversione dei dati dal tuo database in pagine web HTML per i visitatori del tuo sito.

Come proprietario o sviluppatore di un sito web, sei probabilmente già consapevole dell’importanza di mantenere aggiornati il core di WordPress, i temi e i plugin. Tuttavia, è altrettanto fondamentale tenere aggiornato il tuo PHP.

Attualmente, WordPress raccomanda l’utilizzo di almeno PHP 7.4. Le versioni precedenti di PHP non ricevono più supporto attivo per aggiornamenti di sicurezza e correzioni di bug. Pertanto, aggiornare all’ultima versione stabile di PHP può risultare in una migliore sicurezza del sito, prestazioni migliorate e livelli più alti di supporto (sottolineiamo stabile perché una parte dei 60,000+ plugin di WordPress non è ancora completamente compatibile con PHP 8.0, quindi è una buona idea procedere con cautela a questi aggiornamenti).

PHP 7.4 ha introdotto proprietà tipizzate, un separatore numerico con underscore e vari miglioramenti. Da allora, sono state rilasciate alcune altre iterazioni di PHP.

PHP 8.0, rilasciato nel novembre del 2020, ha introdotto una serie di funzionalità essenziali. Oltre a miglioramenti della sintassi e delle prestazioni, il rilascio includeva:

  • Parametri nominati
  • Sintassi di corrispondenza
  • Tipi unione
  • Promozione della Proprietà del Costruttore
  • JIT (che influisce sul modo in cui PHP esegue il codice sorgente)

Un anno dopo è arrivato PHP 8.1, l’ultima versione principale di PHP. Questo aggiornamento include caratteristiche significative, come:

  • Tipi di intersezione
  • Proprietà in sola lettura
  • Enum
  • Fibre
  • Tipo di ritorno “never”

Rimanere aggiornati sulle ultime versioni di PHP può aiutare a migliorare le prestazioni e la sicurezza del tuo sito web. Tuttavia, è importante sapere quali cambiamenti aspettarsi prima di effettuare l’aggiornamento. Se sei interessato a testare lo stato attuale di PHP 8.2, puoi farlo tramite GitHub.

Cosa C’è Di Nuovo In PHP 8.2

Si prevede che PHP 8.2 sarà rilasciato entro la fine del 2022. Ecco il calendario attuale delle uscite, con la Disponibilità Generale (GA) programmata per il 24 novembre 2022:

  • 9 Giugno: Alpha 1
  • 23 Giugno: Alpha 2
  • 7 Luglio: Alpha 3
  • 19 Luglio: Blocco delle funzionalità
  • 21 Luglio: Beta 1
  • 4 Agosto: Beta 2
  • 18 Agosto: Beta 3
  • 1 Settembre: Candidato al rilascio 1
  • 15 Settembre: Candidato al rilascio 2
  • 29 Settembre: Candidato al rilascio 3
  • 13 Ottobre: Candidato al rilascio 4
  • 27 Ottobre: Candidato al rilascio 5
  • 10 Novembre: Candidato al rilascio 6
  • 24 Novembre: GA

Secondo la documentazione ufficiale sul sito PHP, ci dovrebbero essere alcune nuove funzionalità e funzioni deprecate. Diamo un’occhiata ad alcune di esse!

Tipi di Forma Normale Disgiuntiva (DNF)

PHP 8.2 introdurrà una nuova funzionalità di tipi in Forma Normale Disgiuntiva (DNF). La DNF è un modo standardizzato di organizzare le espressioni booleane — specificamente, in una serie di AND combinati da OR. Quando la DNF è applicata alle dichiarazioni di tipo, permette un modo standard di scrivere tipi Union e Intersection combinati che il parser può gestire.

Nuova Funzione mysqli_execute_query e Metodo mysqli::execute_query

Eseguire query MySQLi parametrizzate sarà più facile in PHP 8.2, grazie alla nuova funzione mysqli_execute_query($sql, $params) e al metodo mysqli::execute_query.

Questo ridurrà ulteriormente la complessità nell’uso di query parametrizzate, rendendo così più facile per gli sviluppatori allontanarsi da mysqli_query() così come l’escaping pericoloso/rischioso dei valori degli utenti.

Ottieni Proprietà Enum in Espressioni const

Secondo l’RFC, “Questo RFC propone di permettere l’uso di ->/?-> per recuperare le proprietà degli enum nelle espressioni costanti. La motivazione principale per questo cambiamento è di permettere il recupero delle proprietà nome e valore in luoghi dove gli oggetti enum non sono ammessi, come chiavi di array.”

Nuova Estensione Casuale

PHP 8.2 introduce una nuova estensione PHP chiamata random. Organizza e consolida le funzionalità esistenti di PHP relative alla generazione di numeri casuali. Introduce anche una serie di strutture di classi PHP e classi di eccezione per fornire opzioni granulari per i generatori di numeri casuali e la gestione delle eccezioni.

L’estensione random è inclusa in PHP e non esiste un’opzione di configurazione in fase di compilazione o di esecuzione per disabilitare l’estensione random. L’estensione random sarà sempre disponibile in PHP 8.2 e versioni successive.

Nuova Funzione curl_upkeep

PHP 8.2 introduce una nuova funzione nell’estensione Curl chiamata curl_upkeep. La funzione curl_upkeep chiama curl_easy_upkeep() in libcurl, che è la libreria C sottostante utilizzata dall’estensione PHP Curl.

La funzione curl_upkeep() svolge il lavoro che mantiene attiva una connessione Curl. Tuttavia, non tutti i tipi di connessione che Curl integra supportano la manutenzione della connessione. Attualmente, solo le connessioni HTTP/2 la supportano.

Nuova Funzione ini_parse_quantity

ini_parse_quantity è una nuova funzione che verrà aggiunta a PHP nella versione PHP 8.2. Essa analizza qualsiasi dimensione di dati riconosciuta dai valori INI di PHP (come 56K, 256M o 1G), e restituisce la dimensione dei dati in byte. Può essere utile quando si analizzano valori INI esistenti o forniti in un’applicazione PHP. Tuttavia, non riconosce i suffissi IEC per le dimensioni dei dati come MB, MiB o GB, e non è adatta per convertire valori standard di dimensioni dei dati in byte.

Nuova Funzione memory_reset_peak_usage

PHP 8.2 includerà una nuova funzione chiamata memory_reset_peak_usage. Reseterà l’uso massimo della memoria restituito dalla funzione memory_get_peak_usage.

Questa funzione sarà utile per casi che coinvolgono l’invocazione di un’azione più volte e la registrazione del picco di utilizzo della memoria di ogni iterazione. Gli sviluppatori potranno utilizzare questa nuova funzionalità per resettare il picco di utilizzo della memoria in qualsiasi momento durante la durata della richiesta.

Ricevi contenuti direttamente nella tua casella di posta

Iscriviti ora per ricevere tutti gli ultimi aggiornamenti direttamente nella tua casella di posta.

Classi Sola Lettura

Introdotte in PHP 8.1, le proprietà readonly saranno estese in PHP 8.2 per aggiungere zucchero sintattico in modo che tutte le proprietà della classe siano readonly contemporaneamente:

readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
}

Questo impedirà l’aggiunta di proprietà dinamiche alle classi.

Null, True e False Come Tipi Autonomi

In PHP 8.2, il tipo di ritorno false sarà disponibile come tipo autonomo piuttosto che esclusivamente come tipo unione quando si verifica un errore, cosa che è già possibile:

function alwaysFalse(): false
{
return false;
}

Lo stesso vale per il tipo null. Ad esempio, come tipo autonomo, a differenza di prima, NullPost::getAuthor() sarà in grado di restituire solo null.

PHP 8.2 consente anche true come tipo autonomo.

Depreca Proprietà Dinamiche

Le proprietà dinamiche verranno deprecate in PHP 8.2, risultando in un ErrorException entro PHP 9.0. Queste proprietà sono impostate su un oggetto:

class Post
{
public string $title;
}

// …

$post->name = 'Nome';

Le proprietà dinamiche offrono flessibilità nella creazione di classi (per esempio, oggetti valore) senza una dichiarazione di classe rigida. La loro deprecazione sarà probabilmente un problema per gli sviluppatori che si affidano a proprietà dinamiche perché li spingerà maggiormente verso l’analisi statica. Per questa ragione, alcuni sviluppatori sono preoccupati per questo cambiamento con PHP 8.2.

Tuttavia, le classi che utilizzano __get e __set continueranno a supportare le proprietà dinamiche, così come gli oggetti di stdClass.

In alternativa, gli sviluppatori possono utilizzare il nuovo attributo #[AllowDynamicProperties], dichiarato nello spazio dei nomi globale, sulle classi per quelle proprietà:

#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar';

Sebbene non sia consigliato, un’altra opzione è disabilitare gli avvisi di deprecazione.

Nuovo Modificatore /n

PHP 8.2 includerà il supporto per il modificatore /n (no capture) per la famiglia di funzioni preg_*. Quando utilizzato, qualsiasi gruppo con meta-caratteri () non catturerà a parte i gruppi catturati che sono nominati. Essenzialmente, il risultato è lo stesso del segnare ogni gruppo come non catturante.

Il motivo di questa modifica è che il modificatore semplifica le espressioni regolari complesse per più gruppi. Invece di contrassegnare ogni gruppo come non catturante, gli sviluppatori possono segnare tutti i gruppi come non catturanti. Successivamente, possono selezionare e nominare specifici gruppi che necessitano di cattura.

Ometti Parametri nei Back Traces

Molti sviluppatori utilizzano servizi che tracciano stack di chiamate ed errori di produzione dai codici sorgente. Questi servizi possono notificare agli utenti se e quando qualcosa va storto. Ad esempio, tracciare gli stack di chiamate è utile quando si effettua il debug di un’applicazione.

Tuttavia, a volte le tracce di stack possono contenere informazioni sensibili, come nomi utente e password. PHP 8.2 includerà un attributo #[SensitiveParameter] che impedirà l’inclusione di queste informazioni nelle tracce di stack quando si verificano problemi:

function test(
$foo,
#[SensitiveParameter] $bar,
$baz
) {
throw new Exception('Errore');
}

test('foo', 'bar', 'baz');

PHP 8.2 utilizzerà i parametri sensibili per oscurare le informazioni private dalle tracce di stack, rendendole più sicure. Questi parametri assicurano che i dati non finiscano nei log degli errori. Nota che questo attributo sarà disponibile solo per l’uso sui parametri.

Depreca L’Interpolazione Delle Stringhe ${}

Ci sono vari modi per incorporare variabili in stringhe con PHP. Tuttavia, PHP 8.2 deprecia due metodi. Il primo è l’uso di ${} nelle stringhe:

"Ciao ${world}";

Il secondo metodo utilizza ${} (variabili variabili):

"Ciao ${(world)}";

Questo probabilmente non sarà un problema significativo per gli sviluppatori poiché i due metodi di interpolazione delle stringhe più popolari continueranno a funzionare.

Depreca Le Chiamate Parzialmente Supportate

Un’altra modifica deprecata sarà con i callable parzialmente supportati. Ci sono diversi modi per creare un callable in PHP. Può essere chiamato sia con che senza parametri con la sintassi $callable(), la user_call_func(/a_array), o utilizzando una funzione con un callback.

I pattern di chiamata deprecati includono i seguenti:

$callable = "self::method";
$callable = "parent::method";
$callable = "static::method";
$callable = ["self", "method"];
$callable = ["parent", "method"];
$callable = ["static", "method"];
$callable = ["MyClass", "MyParentClass::myMethod"];
$callable = [new MyClass(), "MyOtherClass::myMethod"];

A partire da PHP 8.2, chiamare una delle opzioni sopra comporterà il seguente avviso di deprecazione:

class Test {
public static function myMethod(): void {
echo "Called";
}
public static function call(): void {
$callable = 'self::myMethod';
call_user_func($callable);
}
}
$callable = Test::call();
// "Chiamato";

Tuttavia, passare questi callable alla funzione is_callable o usarli con i tipi di parametro callable non genererà il messaggio di deprecazione. Per evitare la notifica di deprecazione, gli sviluppatori possono invece convertire le parole chiave parent, self e static nei codici callable ai rispettivi nomi delle classi usando il metodo magico::class.

Parte della ragione dietro al cambiamento è permettere l’uso di callable per le proprietà tipizzate. Rende le proprietà meno dipendenti dal contesto.

MySQLi Non Può Più Essere Compilato Con libmysql

In passato, PHP ha supportato due librerie per la connessione a database MySQL: mysqlnd e libmysql. A partire da PHP 5.4, la prima è stata la libreria predefinita. Tuttavia, è stato possibile compilare MySQLi tramite estensioni.

A partire da PHP 8.2, compilare un’estensione MySQLi con libmysql non sarà supportato. Tentare di farlo comporterà un errore di configurazione:

./configure --with-mysqli=FOO

Collegare mysqli a una libreria esterna non è più supportato

Questo probabilmente non causerà errori significativi per gli sviluppatori. Tuttavia, le due caratteristiche più importanti supportate da libmysql che non sono disponibili con mysqlnd sono supportate per la riconnessione automatica e l’autenticazione tramite LDAP e SASL.

Mantieni Aggiornata la Versione PHP del Tuo WordPress

Come sviluppatore, è fondamentale testare il tuo codice con le versioni future di PHP. In questo caso, gli sviluppatori dovrebbero iniziare a testare il loro codice con PHP 8.2 il prima possibile per garantire che il tuo codice non comprometta i siti degli utenti quando effettuano l’aggiornamento.

Ad background image

L’ambiente Di Sviluppo Perfetto

Ci assicuriamo che il tuo sito web sia veloce, sicuro e sempre disponibile affinché i tuoi visitatori ti facciano fiducia. I piani partono da $1.99/mese.

Scegli Il Tuo Piano