Salta al contenuto principale
PHP

PHP 8.2: Readonly Classes e Type System Migliorato

Esplora le nuove funzionalità di PHP 8.2 che rendono il codice più sicuro e manutenibile.

Giovanni D'Ippolito
2 min

Autore

Giovanni D'Ippolito

Pubblicato

09 November 2025

Tempo di lettura

2 minuti

Tags

#PHP 8.2 #Type System #Readonly #Modern PHP

Novità di PHP 8.2

PHP 8.2 introduce diverse funzionalità che migliorano la sicurezza del tipo e riducono il boilerplate code.

Readonly Classes

Le classi readonly rendono immutabili tutte le proprietà:

<?php
// PHP 8.2+
readonly class User
{
    public function __construct(
        public string $name,
        public string $email,
        public int $age,
    ) {}
}

$user = new User('Giovanni', 'giovanni@devgd.it', 30);

// ❌ Questo genera un errore
$user->name = 'Mario'; // Cannot modify readonly property

// ✅ Per modificare, devi creare una nuova istanza
$updatedUser = new User('Mario', $user->email, $user->age);
?>
Le readonly classes sono perfette per Value Objects e DTOs (Data Transfer Objects).

Disjunctive Normal Form (DNF) Types

Ora puoi combinare union e intersection types:

<?php
class PostRepository
{
    // Union di intersection types
    public function find(int|string $id): (Post&Publishable)|(Draft&Editable)|null
    {
        // Logica di ricerca
    }
}

// Esempio pratico con interfacce
interface Renderable {}
interface Cacheable {}
interface Loggable {}

class DataService
{
    public function process((Renderable&Cacheable)|(Loggable&Cacheable) $data): void
    {
        if ($data instanceof Cacheable) {
            // Sicuramente Cacheable
        }
    }
}
?>

Null, False e True come Standalone Types

Maggiore precisione nella definizione dei tipi:

<?php
class ValidationResult
{
    // Può restituire solo true
    public function isValid(): true
    {
        // Se arriva qui, è sempre true
        return true;
    }

    // Può restituire solo false
    public function hasErrors(): false
    {
        return false;
    }
}

class Cache
{
    // Restituisce la stringa o null
    public function get(string $key): string|null
    {
        // Implementazione
    }

    // Metodo che restituisce solo false in caso di errore
    public function set(string $key, mixed $value): true|false
    {
        // Implementazione
    }
}
?>

Constants in Traits

Finalmente puoi definire costanti nei trait:

<?php
trait HasApiEndpoint
{
    public const API_VERSION = 'v1';
    public const BASE_URL = 'https://api.example.com';

    public function getEndpoint(): string
    {
        return self::BASE_URL . '/' . self::API_VERSION;
    }
}

class UserService
{
    use HasApiEndpoint;

    public function fetchUsers(): array
    {
        $url = $this->getEndpoint() . '/users';
        // Fetch logic
    }
}
?>
PHP 8.2 continua il trend di rendere PHP un linguaggio più type-safe e moderno!

Condividi questo articolo

Articoli Correlati

PHP

Guida Completa alle Funzioni Arrow in PHP 8

Scopri come le arrow functions di PHP 8 possono semplificare il tuo codice e renderlo più leggibile.

01 Nov 2025 2 min
Leggi di più →
PHP

PHP Enums: Type-Safe Constants per il Tuo Codice

Scopri come usare gli Enums di PHP 8.1 per rendere il tuo codice più sicuro e espressivo.

17 Nov 2025 3 min
Leggi di più →
PHP

PHP Attributes: Metaprogramming Moderno

Scopri come usare gli Attributes di PHP 8 per aggiungere metadata al tuo codice.

25 Nov 2025 1 min
Leggi di più →

Rimani Aggiornato

Iscriviti alla nostra newsletter per ricevere gli ultimi articoli e novità direttamente nella tua casella di posta.