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à:
new
senza parentesi extramb_
new
senza parentesi extraFino 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.
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);
}
}
}
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.
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
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()
).
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
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();
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