Post Image

PHP 8.4: Object API e Accesso Diretto ai Metodi

PHP 8.4 rappresenta un importante passo avanti per la programmazione orientata agli oggetti, introducendo due migliorie fondamentali: una Object API per BCMath e un nuovo modo per accedere a metodi e proprietà immediatamente dopo l'istanziazione di un oggetto. Queste funzionalità non solo rendono il codice più leggibile, ma lo avvicinano anche agli standard moderni di programmazione. Vediamo nel dettaglio come queste novità possono semplificare la vita agli sviluppatori.

Object API per BCMath

Se hai mai lavorato con calcoli matematici a precisione arbitraria in PHP, probabilmente conosci BCMath. Fino a PHP 8.4, la libreria forniva un'API procedurale con funzioni come bcadd e bccomp, che richiedevano l'utilizzo di stringhe per rappresentare i numeri. Ad esempio, ecco come si presentava un calcolo di addizione e confronto prima della versione 8.4:

$num1 = '0.12345';
$num2 = '2';
$result = bcadd($num1, $num2, 5);

echo $result; // '2.12345'
var_dump(bccomp($num1, $num2) > 0); // false

Con PHP 8.4, arriva la classe BcMath\Number, che porta un approccio orientato agli oggetti. Ora puoi rappresentare numeri come oggetti immutabili e utilizzare operatori matematici standard. Ecco lo stesso esempio riscritto:

use BcMath\Number;

$num1 = new Number('0.12345');
$num2 = new Number('2');
$result = $num1 + $num2;

echo $result; // '2.12345'
var_dump($num1 > $num2); // false

Perché Scegliere l'Object API?

Il passaggio alla programmazione orientata agli oggetti non è solo una questione di stile. Con l'Object API:

  • Leggibilità migliorata: Gli operatori matematici standard sono più intuitivi rispetto a funzioni come bcadd.
  • Immutabilità: Ogni operazione crea un nuovo oggetto, evitando modifiche accidentali ai valori originali.
  • Maggiore integrazione: Grazie all'interfaccia Stringable, gli oggetti Number possono essere direttamente convertiti in stringhe quando necessario.

Ecco un esempio più complesso per vedere in azione l'Object API:

$num1 = new Number('1.123');
$num2 = new Number('0.456');
$num3 = new Number('2.5');

$result = ($num1 + $num2) * $num3;

echo $result; // '3.948'

Accesso Diretto a Metodi e Proprietà

Un'altra innovazione introdotta con PHP 8.4 è la possibilità di accedere direttamente a metodi e proprietà di un oggetto appena istanziato, senza bisogno di racchiudere l'operazione tra parentesi. Prima di PHP 8.4, il codice era più verboso:

class PhpVersion
{
    public function getVersion(): string
    {
        return 'PHP 8.3';
    }
}

var_dump((new PhpVersion())->getVersion());

Con PHP 8.4, puoi semplificare:

class PhpVersion
{
    public function getVersion(): string
    {
        return 'PHP 8.4';
    }
}

var_dump(new PhpVersion()->getVersion());

Benefici della Nuova Sintassi

  • Codice più compatto: Le parentesi non sono più necessarie, riducendo il disordine visivo.
  • Leggibilità migliorata: Soprattutto in codice complesso con più concatenazioni.
  • Compatibilità garantita: La modifica non rompe il codice precedente.

Esempio

Supponiamo di voler leggere una proprietà subito dopo aver creato un oggetto:

Prima di PHP 8.4:

$version = (new PhpVersion())->version;

Con PHP 8.4:

$version = new PhpVersion()->version;

Conclusione

Le nuove funzionalità introdotte in PHP 8.4 sono esempi perfetti di come PHP continui a evolversi, rendendo la programmazione più moderna e intuitiva. Dall'adozione di un Object API per BCMath alla semplificazione della sintassi per l'accesso a metodi e proprietà, queste innovazioni migliorano sia la leggibilità del codice che l'esperienza dello sviluppatore.