• Mutimedia Web la Web Agency Italiana. Contattateci per preventivi gratuiti e consulenze nello sviluppo del vostro sito web o app Ios e Android. Professinalità e assistenza garatite!
    Immagini dei quadri e opere di: Giuseppe Lattanzio

  • Social

    [easy-social-share buttons="facebook,twitter,pinterest,linkedin,digg,stumbleupon,vk,tumblr,print,mail,del,reddit,whatsapp" counters=0 hide_names="force" template="grey-blocks-retina"]
  • WEB AGENCY

  • Sede Principale

    Multimedia Web

    Blog Studio Web

    Studio Web

    Sede a Venezia

    Web Agency Venezia

    Sede a New York

    Nyc Web Design

    Sede International

    Web Designer International

    Sito Demo One Page

    Spaghetti Web

    Landing page

    Savinus

  • smartphone

    Trovaci sul tuo smartphone

  • web-designer-ancona
  • AGENZIA WEB ITALIA

Home / News / PHP 8.1: gli Enum | HTML.it

PHP 8.1: gli Enum | HTML.it


Parlando delle novità di PHP 8.1, in un precedente articolo abbiamo descritto le Fiber che portano il supporto per le funzioni asincrone. Tra le altre feature introdotte con questo aggiornamento troviamo anche gli Enum che mettono a disposizione un nuovo tipo di dati, detti anche tipi enumerati, permettendo agli utilizzatori del linguaggio di definirne sia il tipo che i valori.

Per implementare questi nuovi costrutti gli sviluppatori di PHP hanno preso come riferimento i tipi enumerati di altri linguaggio come per esempio Rust, Kotlin e Swift ma godono di una modellazione propria. Come specificato nella documentazione relativa agli Enum essi fanno riferimento alla categoria dei Fancy Object che si ritrovano anche in altre soluzioni come Python, Java, C# e Scala, in futuro però si dovrebbe introdurre il supporto anche agli ADT (Algebraic Data Types) propri di C, Typescript e F#.

Le enumerazioni sono associate a classi e oggetti e questo significa che, se non viene specificato diversamente, il loro comportamento è lo stesso di qualsiasi istanza di oggetto. Fondamentalmente gli Enum sono simili alle classi e ne condividono i medesimi namespace, le stesse interfacce e gli stessi traits.

Prevedono inoltre le medesime modalità per l’autoload e ciascun Enum definisce un nuovo tipo che ha una quantità di valori possibili fissa e limitata.

Funzionamento degli enum

L’esempio proposto di seguito, e ripreso dalla documentazione ufficiale, mostra la dichiarazione tramite il costrutto enum di un tipo enumerato che prende il nome di Suit e prevede quattro diversi valori introdotti tramite case:


enum Suit {
  case Hearts;
  case Diamonds;
  case Clubs;
  case Spades;
}

In questi casi è possibile assegnare le variabili ad uno di questi valori mentre una funzione può prevedere una verifica del tipo ed è possibile passare soltanto valori di quel determinato tipo. Quindi data una funzione di questo genere:


function pick_a_card(Suit $suit) { ... }

e dato:


$val = Suit::Diamonds;

non è possibile effettuare una chiamata che non preveda il tipo scelto, come nel caso di:


pick_a_card('Spades');

che produrrebbe un errore.

In ogni caso un’enumerazione può avere zero o più definizioni introdotte da case e da questo punto di vista non vi sono limiti. Chiaramente un Enum privo di definizioni non sarebbe utile e viene segnalato solo per il fatto di non dar luogo ad eccezioni.

Backed Enum

I Backed Enum sono un tipo particolare di Enum utile per l’introduzione di valori scalari ai vari casi proposti da case, ad esempio:


enum Suit: string {
  case Hearts = 'H';
  case Diamonds = 'D';
  case Clubs = 'C';
  case Spades = 'S';
}
print Suit::Clubs->value;
// Stampa "C"

Si possono avere Backed Enum di tipo intero o di tipo stringa mentre non è possibile disporre simultaneamente di entrambi i tipi. Il costrutto non supporta la generazione automatica di equivalenti scalari, ad esempio sequenze di interi, e non è possibile utilizzare il medesimo equivalente scalare per più case.

Fonte: PHP



Source link