PHP 8.4 è stato rilasciato: principali novità e miglioramenti
Il 21 novembre 2024 è stata rilasciata la versione 8.4 di PHP. Per la precisione, la versione 8.4.1.
I rilasci più recenti di Laravel Herd e PHPStorm supportano già questa versione.
Tra le principali novità:
- possibilità di concatenare
newsenza parentesi extra - property hooks
- visibilità asimmetrica delle proprietà
- nuove funzioni relative alla ricerca negli array
- nuove funzioni
mb_ - creare un oggetto DateTime partendo da un timestamp Unix
- parsing di HTML5
- deprecazioni e varie
Possibilità di concatenare new senza parentesi extra
Fino a PHP 8.3 compreso, è necessario utilizzare le parentesi per racchiudere l’istanziazione della classe:
# PHP <= 8.3.x
(new MyCustomClass())->myMethod();
Ora è possibile scrivere, ad esempio:
# PHP 8.4.x
new MyCustomClass()->myMethod();
Questa sintassi consente di accedere a costanti, proprietà e metodi di classe senza dover utilizzare parentesi extra.
Property hooks
Questa funzionalità, già presente in altri linguaggi quali C#, Kotlin e Swift, consente di specificare in che modo accedere a una proprietà - in lettura o scrittura - senza dover utilizzare metodi aggiuntivi o ricorrere ai metodi magici __get() e __set().
Nel momento in cui si definisce una proprietà, è possibile specificare un getter e/o un setter per sovrascrivere, rispettivamente, ciò che viene letto quando si accede a quella proprietà e in che modo viene valorizzata quando la si scrive.
Ho scritto e/o perché non è necessario specificarli entrambi.
Vediamo un esempio:
<?php
class Person
{
public function __construct(
private string $firstName,
private string $lastName
)
{
//
}
public string $fullName {
get => "$this->firstName $this->lastName"
set => {
[$this->firstName, $this->lastName] = explode(' ', $value, 2);
}
}
}
Visibilità asimmetrica
Le proprietà di classe ora possono avere una visibilità differente in lettura e in scrittura. Ad esempio, una proprietà potrebbe essere accessibile pubblicamente in lettura ma avere visibilità protected in scrittura.
Ad esempio:
<?php
class Item
{
public function __construct(
public protected(set) string $id,
public protected(set) string $name
) {}
}
$item = new Item(1, 'Plugin');
echo($item->name); // 'Plugin'
$item->name = 'Updated name'; // FATAL ERROR!
L’utilizzo degli hook delle proprietà in combinazione con la visibilità asimmetrica permette di ottenere un’ampia flessibilità e soddisfare varie esigenze.
Nuove funzioni relative alla ricerca negli array
PHP 8.4 introduce alcune nuove funzioni per la ricerca di elementi in un array:
array_find()array_find_key()array_any()array_all()
Vediamo un esempio:
<?php
$array = [
'a' => 'Pad',
'b' => 'Mouse',
'c' => 'Microphone',
'd' => 'Monitor',
'e' => 'Printer'
];
// Ritorna il primo elemento la cui lunghezza sia di 7 caratteri
var_dump(array_find($array, fn (string $value) => strlen($value) == 7)); // 'Monitor'
// Ritorna la chiave del primo dipositivo la cui lunghezza sia di almeno 6 caratteri
var_dump(array_find_key($array, fn (string $value) => strlen($value) > 6)); // 'c'
// Verifica se ci sia almeno un elemento la cui lunghezza sia inferiore a 5 caratteri
var_dump(array_any($array, fn (string $value) => strlen($value) < 5)); // true
// Verifica se tutti gli elementi abbiano lunghezza inferiore a 5 caratteri
var_dump(array_all($array, fn (string $value) => strlen($value) < 5 )); // false
Nuove funzioni mb_
PHP 8.4 aggiunge le funzioni che supportano il multibyte:
mb_trim()mb_ltrim()mb_rtrim()mb_ucfirst()mb_lcfirst()
Funzionamento e parametri sono analoghi alle corrispondenti funzioni non multibyte (es. trim()).
Creare un oggetto DateTime partendo da un timestamp Unix
Per semplificare la creazione di un oggetto DateTime a partire da un timestamp Unix, è stato aggiunto il metodo DateTimeImmutable::createFromTimestamp().
<?php
$datetime = DateTimeImmutable::createFromTimestamp(1732436675);
echo $datetime->format('d-m-Y'); // 24-11-2024
$datetime = DateTimeImmutable::createFromTimestamp(1732436675.432);
echo $datetime->format('d-m-Y h:i:s.u'); // 24-11-2024 08:24:35.432000
Parsing di HTML5
La classe DomHTMLDocument consente di importare il contenuto di una pagina HTML5 e riconosce i tag semantici - ad esempio main, article e section.
È anche possibile leggere il contenuto a partire da un file, oppure creare un documento vuoto:
<?php
$html = '...<main>...</main>...';
$path = '/home/foo/dev/bar/file.html';
$htmlDocument = DomHTMLDocument::createFromString($html);
$anotherDocument = DomHTMLDocument::createFromFilePath($path);
$emptyDocument = DomHTMLDocument::createEmpty();
Deprecazioni e varie
PHP 8.4 riporta un elenco piuttosto lungo di funzioni e caratteristiche deprecate, ovvero marcate per un’eventuale rimozione in futuro.
Sono presenti, inoltre, nuove classi, interfacce e funzioni.
Per l’elenco completo, è possibile consultare