Hai già aggiornato a PHP 8.4 il tuo sito?
Non è solo questione di versioni: è una questione di performance, sicurezza e futuro.
PHP 8.4 è arrivato a fine novembre 2024, e con lui un nuovo passo avanti per chi vuole mantenere il proprio sito web veloce, sicuro e competitivo. Presente già da tempo nei nostri server di hosting, se stai ancora usando PHP 8.3 (o le versioni precedenti), ti suggeriamo di aggiornare il prima possibile la tua applicazione/sito web tramite il tuo pannello di controllo.
Ma vediamo in dettaglio quali migliorie sono state apportate.
Property Hooks
I property hooks introdotti in PHP 8.4 permettono di definire comportamenti personalizzati per l’accesso e la modifica delle proprietà di una classe, senza dover usare metodi get
/set
o docblock manuali. Questo migliora il supporto da parte di IDE e strumenti statici, evita errori di sincronizzazione e consente una gestione più chiara e affidabile dei valori.
In breve:
Eliminano la necessità di getter/setter espliciti.
Forniscono hook nativi (es.
get
/set
) per elaborare i valori.Rendono il codice più pulito, mantenendo il supporto alla tipizzazione e agli strumenti di analisi.
class User {
public string $name {
get {
return ucfirst($this->name);
}
set {
$this->name = trim($value);
}
}
}
Asymmetric Visibility
Asymmetric visibility è una nuova funzionalità di PHP 8.4 che permette di separare i livelli di accesso in lettura e scrittura di una proprietà. In pratica, puoi rendere una proprietà pubblica in lettura ma privata in scrittura, evitando di dover creare metodi getter manuali solo per esporre il valore.
<?php
class PhpVersion
{
public private(set) string $version = '8.4';
public function increment(): void
{
[$major, $minor] = explode('.', $this->version);
$minor++;
$this->version = "{$major}.{$minor}";
}
}
$obj = new PhpVersion();
$obj->increment();
echo $obj->version; // print 8.5
$obj2 = new PhpVersion();
$obj2->version="8.5";
echo $obj2->version; // Fatal error
#[\Deprecated] Attribute
L’attributo #[\Deprecated] permette di rendere disponibile il meccanismo di deprecazione presente in php, anche su funzioni, metodi e classi definite dell’utente. Ad esempio come segue (codice citato da php.net):
class PhpVersion
{
#[\Deprecated(
message: "use PhpVersion::getVersion() instead",
since: "8.4",
)]
public function getPhpVersion(): string
{
return $this->getVersion();
}
public function getVersion(): string
{
return '8.4';
}
}
$phpVersion = new PhpVersion();
// Deprecated: Method PhpVersion::getPhpVersion() is deprecated since 8.4, use PhpVersion::getVersion() instead
echo $phpVersion->getPhpVersion();
Nuove funzionalità ext-dom con supporto HTML5
PHP 8.4 introduce una nuova API DOM conforme agli standard, che:
Supporta correttamente il parsing di documenti HTML5.
Risolve bug storici legati alla non conformità del DOM.
Aggiunge nuove funzioni utili per lavorare più facilmente con i documenti.
La nuova API si trova nel namespace Dom
, e puoi creare documenti tramite le classi:
Dom\HTMLDocument
per HTMLDom\XMLDocument
per XML
use Dom\HTMLDocument;
$doc = new HTMLDocument();
$doc->loadHTML('<!DOCTYPE html><html><body><p>Hello</p></body></html>');
echo $doc->body->firstChild->textContent; // Output: Hello
Object API per BCMath
PHP 8.4 introduce l’oggetto BcMath\Number
, che permette di lavorare con numeri a precisione arbitraria in modo orientato agli oggetti e utilizzando operatori matematici standard (+
, -
, *
, ecc.).
Gli oggetti sono immutabili.
Implementano l’interfaccia
Stringable
, quindi possono essere usati in contesti stringa (es.echo
).
Ad esempio come segue (codice citato da php.net):
use BcMath\Number;
$num1 = new Number('0.12345');
$num2 = new Number('2');
$result = $num1 + $num2;
echo $result; // '2.12345'
var_dump($num1 > $num2); // false
Nuove funzioni array_*()
Queste funzioni rendono il codice più espressivo, riducendo la necessità di foreach
o array_filter
per i casi più comuni. Alcuni esempi:
array_find()
Restituisce il primo valore che soddisfa una condizione (callback), oppure
null
se non trovato.
$numbers = [1, 3, 6, 8, 9];
$result = array_find($numbers, fn($n) => $n > 5);
echo $result; // Output: 6
array_find_key()
Restituisce la chiave del primo valore che soddisfa la condizione, oppure
null
.
$data = ['a' => 1, 'b' => 4, 'c' => 7];
$key = array_find_key($data, fn($v) => $v > 5);
echo $key; // Output: c
array_any()
Restituisce
true
se almeno un elemento soddisfa la condizione.
$values = [1, 2, 3];
$hasEven = array_any($values, fn($n) => $n % 2 === 0);
var_dump($hasEven); // Output: bool(true)
array_all()
Restituisce
true
solo se tutti gli elementi soddisfano la condizione.
$values = [2, 4, 6];
$allEven = array_all($values, fn($n) => $n % 2 === 0);
var_dump($allEven); // Output: bool(true)
PDO: Sottoclassi specifiche per driver
Sono state introdotte sottoclassi specifiche del namespace Pdo\
(come Pdo\Mysql
, Pdo\Pgsql
, ecc.), che forniscono un’interfaccia tipizzata e più chiara rispetto al classico new PDO(...)
. Queste classi rendono il codice più leggibile e offrono migliori suggerimenti da parte degli IDE.
Ad esempio una connessione verso MySql con opzioni personalizzate si presenterebbe così:
use Pdo\Mysql;
$pdo = new Mysql(
host: '127.0.0.1',
dbname: 'shop',
username: 'admin',
password: 'password',
options: [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]
);
$stmt = $pdo->prepare("SELECT * FROM products WHERE price > ?");
$stmt->execute([100]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($results);
In sostanza:
Pdo\Mysql
sostituiscenew PDO("mysql:...")
con costruttori leggibili e tipizzati.Meno errori nei DSN, migliore supporto da strumenti come PhpStorm.
Fa parte di una modernizzazione dell'estensione PDO.
new MyClass()->method()
senza parentesi
Le proprietà ed i metodi di oggetti instaziati, possono ora essere richiamati senza eseguire il wrap dell’oggetto tra parentesi. Ad esempio come segue (codice citato da php.net):
class PhpVersion
{
public function getVersion(): string
{
return 'PHP 8.4';
}
}
var_dump(new PhpVersion()->getVersion());
Come faccio a cambiare la versione di PHP che sto utilizzando sul mio hosting?
Con i nostri piani di hosting, è incredibilmente semplice cambiare in modo autonomo e rapido la versione di PHP in uso sul vostro sito web. Potete farlo così:
Accedere per prima cosa al vostro pannello di controllo hosting
Da qui accedere alla sezione Siti
In seguito cliccare sul sito web su cui vuoi eseguire la variazione
Dalla pagina di gestione del Sito web, selezionare la versione di PHP 8.4, e salvare
Dopo pochi minuti sul vostro sito web sarà attivo PHP 8.4
Qualora vogliate tornare indietro, sarete sempre liberi di fare la medesima operazioni con una diversa versione di PHP, sempre scegliendola dalla medesima voce.
Ci auguriamo che questo articolo di promemoria, sia per voi utile, e ricordate che rimaniamo sempre a vostra disposizione se necessitate di maggiori informazioni, dettagli o chiarimenti.