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 new senza 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

Articolo precedente Prossimo articolo