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.
Scopri come usare gli Enums di PHP 8.1 per rendere il tuo codice più sicuro e espressivo.
Autore
Giovanni D'Ippolito
Pubblicato
17 November 2025
Tempo di lettura
3 minuti
Gli Enums (enumerazioni) permettono di definire un insieme limitato di valori possibili per una variabile, rendendo il codice più type-safe.
Ecco come definire un enum semplice:
<?php
enum Status
{
case Pending;
case Approved;
case Rejected;
}
// Utilizzo
class Order
{
public function __construct(
public Status $status = Status::Pending
) {}
}
$order = new Order(Status::Approved);
// Type-safe - questo genera errore
// $order = new Order('Approved'); // ❌ Errore!
?>
Gli enums possono avere valori sottostanti (string o int):
<?php
enum OrderStatus: string
{
case Pending = 'pending';
case Processing = 'processing';
case Shipped = 'shipped';
case Delivered = 'delivered';
case Cancelled = 'cancelled';
}
// Conversione da valore
$status = OrderStatus::from('pending'); // Pending
$status = OrderStatus::tryFrom('invalid'); // null (non genera errore)
// Ottieni il valore
echo OrderStatus::Pending->value; // 'pending'
// Uso nel database
class Order extends Model
{
protected $casts = [
'status' => OrderStatus::class,
];
}
// Salva nel database come stringa, recupera come Enum
$order = new Order();
$order->status = OrderStatus::Pending;
$order->save();
// Recupera
$order = Order::find(1);
echo $order->status->value; // 'pending'
?>
Puoi aggiungere metodi agli enums:
<?php
enum PaymentStatus: string
{
case Pending = 'pending';
case Paid = 'paid';
case Failed = 'failed';
case Refunded = 'refunded';
public function color(): string
{
return match($this) {
self::Pending => 'yellow',
self::Paid => 'green',
self::Failed => 'red',
self::Refunded => 'blue',
};
}
public function label(): string
{
return match($this) {
self::Pending => 'In Attesa',
self::Paid => 'Pagato',
self::Failed => 'Fallito',
self::Refunded => 'Rimborsato',
};
}
public function canRefund(): bool
{
return $this === self::Paid;
}
}
// Utilizzo
$status = PaymentStatus::Paid;
echo $status->color(); // 'green'
echo $status->label(); // 'Pagato'
if ($status->canRefund()) {
// Processa rimborso
}
?>
Gli enums possono implementare interfacce:
<?php
interface HasLabel
{
public function label(): string;
}
interface HasColor
{
public function color(): string;
}
enum UserRole: string implements HasLabel, HasColor
{
case Admin = 'admin';
case Editor = 'editor';
case User = 'user';
public function label(): string
{
return match($this) {
self::Admin => 'Amministratore',
self::Editor => 'Editore',
self::User => 'Utente',
};
}
public function color(): string
{
return match($this) {
self::Admin => 'red',
self::Editor => 'blue',
self::User => 'gray',
};
}
public function permissions(): array
{
return match($this) {
self::Admin => ['*'],
self::Editor => ['create', 'update', 'read'],
self::User => ['read'],
};
}
public function can(string $permission): bool
{
$permissions = $this->permissions();
return in_array('*', $permissions) || in_array($permission, $permissions);
}
}
// Utilizzo
$role = UserRole::Editor;
if ($role->can('update')) {
// Permesso concesso
}
?>
Ottieni tutti i valori di un enum:
<?php
enum Priority: int
{
case Low = 1;
case Medium = 2;
case High = 3;
case Critical = 4;
}
// Ottieni tutti i cases
$allPriorities = Priority::cases();
// Usa in un select
<select name="priority">
@foreach(Priority::cases() as $priority)
<option value="{{ $priority->value }}">
{{ $priority->name }}
</option>
@endforeach
</select>
?>
Scopri come le arrow functions di PHP 8 possono semplificare il tuo codice e renderlo più leggibile.
Esplora le nuove funzionalità di PHP 8.2 che rendono il codice più sicuro e manutenibile.
Scopri come usare gli Attributes di PHP 8 per aggiungere metadata al tuo codice.
Iscriviti alla nostra newsletter per ricevere gli ultimi articoli e novità direttamente nella tua casella di posta.