Le novità di PHP 8.4
Il 21 novembre è stata rilasciata la tanto attesa versione di PHP 8.4, che porta con sé nuove funzionalità e miglioramenti pensati per rendere lo sviluppo web ancora più efficiente e potente. Dalle ottimizzazioni delle performance a nuovi strumenti per i programmatori, PHP 8.4 si conferma un passo avanti per il linguaggio che continua a dominare il panorama del web. Scopriamo insieme le novità principali!
Eliminiamo le parentesi!
Fino a questa versione, per accedere ai metodi e alle proprietà durante l'istanza della classe MiaClasse, era necessario racchiuderla tra parentesi, come nell'esempio seguente:
//PHP < 8.4
$service = (new User())->getAvatar(32, 32);
Questo aggiornamento rende l'accesso ai metodi della classe più fluido, senza la necessità di aggiungere parentesi o utilizzare un metodo di costruzione statico:
//PHP 8.4
$service = new User()->getAvatar(32, 32);
Nuove funzioni native
È vero che, quando lavoriamo con PHP, amiamo approfittare delle funzioni avanzate e delle utilità che semplificano il nostro codice. PHP 8.4 ha introdotto 4 nuove funzioni che migliorano ulteriormente la gestione degli array, offrendo strumenti più potenti e versatili per lavorare con i dati in modo ancora più efficiente.
array_find()array_find_key()array_any()array_all()
array_find()
La funzione array_find($array, $callback) restituisce il primo elemento per cui il $callback restituisce true:
$array = [
'grape',
'pineapple',
'strawberry',
'kiwi',
];
$fruit = array_find($array, fn (string $value) => strlen($value) > 5);
echo $fruit // string(6) "orange"
array_find_key()
La funzione array_find_key($array, $callback) restituisce la chiave del primo elemento per cui il $callback restituisce true. Come array_find(), restituisce null se non viene trovato alcun elemento corrispondente:
$array = [
'grape',
'pineapple',
'strawberry',
'kiwi',
];
$key = array_find_key($array, fn (string $value) => strlen($value) > 5);
echo $key // int() 2
array_any()
Puoi utilizzare la funzione array_any() per verificare se almeno uno degli elementi dell'array restituisce true.
$array = [
'grape',
'pineapple',
'strawberry',
'kiwi',
];
$any = array_any($array, fn (string $value) => strlen($value) > 5);
echo $any // bool(true)
array_all()
Puoi utilizzare la funzione array_all() per verificare se tutti gli elementi dell'array restituiscono true.
$array = [
'grape',
'pineapple',
'strawberry',
'kiwi',
];
$all = array_all($array, fn (string $value) => strlen($value) > 5);
echo $all // bool(false)
$all = array_all($array, fn (string $value) => strlen($value) > 4);
echo $all // bool(true)
Non esitate a dare un'occhiata alla Documentazione di PHP 8.4
Property Hooks
le Property Hooks in PHP permettono di gestire le proprietà di un oggetto in modo più elegante e flessibile. Invece di utilizzare metodi getter e setter, gli hook consentono di eseguire codice automaticamente quando una proprietà viene letta o modificata. Questo migliora la leggibilità e riduce il codice boilerplate, permettendo di aggiungere logiche come la validazione dei dati o il logging in modo diretto e pulito. In sostanza, le Property Hooks semplificano la gestione delle proprietà, rendendo il codice più conciso e manutenibile.
// php < 8.4
class Locale
{
private string $languageCode;
private string $countryCode;
public function __construct(string $languageCode, string $countryCode)
{
$this->setLanguageCode($languageCode);
$this->setCountryCode($countryCode);
}
public function getLanguageCode(): string
{
return $this->languageCode;
}
public function setLanguageCode(string $languageCode): void
{
$this->languageCode = $languageCode;
}
public function getCountryCode(): string
{
return $this->countryCode;
}
public function setCountryCode(string $countryCode): void
{
$this->countryCode = strtoupper($countryCode);
}
public function setCombinedCode(string $combinedCode): void
{
[$languageCode, $countryCode] = explode('_', $combinedCode, 2);
$this->setLanguageCode($languageCode);
$this->setCountryCode($countryCode);
}
public function getCombinedCode(): string
{
return \sprintf("%s_%s", $this->languageCode, $this->countryCode);
}
}
$brazilianPortuguese = new Locale('pt', 'br');
var_dump($brazilianPortuguese->getCountryCode()); // BR
var_dump($brazilianPortuguese->getCombinedCode()); // pt_BR
Quando invece con php 8.4 lo stesso codice può essere scrito in modo più conciso e pulito.
class Locale
{
public string $languageCode;
public string $countryCode
{
set (string $countryCode) {
$this->countryCode = strtoupper($countryCode);
}
}
public string $combinedCode
{
get => \sprintf("%s_%s", $this->languageCode, $this->countryCode);
set (string $value) {
[$this->languageCode, $this->countryCode] = explode('_', $value, 2);
}
}
public function __construct(string $languageCode, string $countryCode)
{
$this->languageCode = $languageCode;
$this->countryCode = $countryCode;
}
}
$brazilianPortuguese = new Locale('pt', 'br');
var_dump($brazilianPortuguese->countryCode); // BR
var_dump($brazilianPortuguese->combinedCode); // pt_BR
Nuove funzioni mb_
In questa nuova versione, PHP introduce delle varianti multi-octet delle funzioni classiche come trim, ltrim, rtrim, ucfirst e lcfirst. Queste versioni sono progettate per supportare correttamente stringhe contenenti caratteri multibyte, come quelli nelle lingue asiatiche, che potrebbero non essere gestiti correttamente dalle versioni tradizionali di queste funzioni.
mb_trimmb_ltrimmb_rtrimmb_ucfrirstmb_lcfitst
Queste nuove funzioni saranno più robuste nell'elaborare caratteri che occupano più di un byte, evitando potenziali errori legati alla codifica di stringhe in UTF-8 o altre codifiche multibyte. Questo miglioramento aiuterà a rendere il trattamento delle stringhe più sicuro e coerente, senza la necessità di utilizzare librerie esterne o funzioni aggiuntive.
DateTimeImmutable
Con la nuova funzione createFromTimestamp(), PHP semplifica la creazione di un oggetto DateTime a partire da un timestamp Unix. Questa funzione supporta sia i timestamp standard che quelli con microsecondi, permettendo una gestione del tempo più precisa e intuitiva. Gli sviluppatori non dovranno più preoccuparsi della conversione manuale dei timestamp con microsecondi, rendendo il processo più rapido ed efficiente.
$dt = DateTimeImmutable::createFromTimestamp(1672531200);
$dt->format('Y-m-d'); // 2023-01-01
$dt = DateTimeImmutable::createFromTimestamp(1672531200.789);
$dt->format('Y-m-d h:i:s.u'); // 2023-01-01 00:00:00.789000
Conclusione
La comunità PHP continua a sorprenderci con le sue evoluzioni, dimostrando che il linguaggio è in continua crescita. Le nuove funzionalità sono già disponibili e arricchiscono PHP con strumenti moderni e potenti per lo sviluppo di applicazioni robuste.
Questi miglioramenti sono già stati implementati e sono pronti per essere utilizzati. Se siete curiosi di scoprire le novità, potete iniziare subito a testare le nuove funzionalità seguendo un tutorial.
PHP, lontano dal declino, continua a rinnovarsi e a consolidare la sua posizione come uno dei linguaggi più usati per lo sviluppo web. Chi pensava che PHP fosse superato rimarrà sorpreso dalla sua continua evoluzione!