{"id":22519,"date":"2021-12-02T22:03:34","date_gmt":"2021-12-02T21:03:34","guid":{"rendered":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/"},"modified":"2021-12-02T22:03:34","modified_gmt":"2021-12-02T21:03:34","slug":"php-8-1-gli-enum-html-it","status":"publish","type":"post","link":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/","title":{"rendered":"PHP 8.1: gli Enum | HTML.it"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>Parlando delle novit\u00e0 di <strong>PHP 8.1<\/strong>, in un precedente articolo abbiamo descritto le <a href=\"https:\/\/www.html.it\/30\/11\/2021\/php-8-1-cosa-sono-le-fiber\/\" target=\"_blank\" rel=\"nofollow noopener\">Fiber<\/a> che portano il supporto per le funzioni asincrone. Tra le altre feature introdotte con questo aggiornamento troviamo anche gli <strong>Enum<\/strong> che mettono a disposizione un nuovo tipo di dati, detti anche <strong>tipi enumerati<\/strong>, permettendo agli utilizzatori del linguaggio di definirne sia il tipo che i valori.<span id=\"more-405843\"\/><\/p>\n<p>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 <a href=\"https:\/\/github.com\/Crell\/enum-comparison\" target=\"_blank\" rel=\"nofollow noopener\">Fancy Object<\/a> che si ritrovano anche in altre soluzioni come Python, Java, C# e Scala, in futuro per\u00f2 si dovrebbe introdurre il supporto anche agli ADT (<em>Algebraic Data Types<\/em>) propri di C, Typescript e F#.<\/p>\n<p>Le enumerazioni sono associate a classi e oggetti e questo significa che, se non viene specificato diversamente, il loro comportamento \u00e8 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. <\/p>\n<p>Prevedono inoltre le medesime modalit\u00e0 per l\u2019autoload e ciascun Enum definisce un nuovo tipo che ha una quantit\u00e0 di valori possibili fissa e limitata.<\/p>\n<h2>Funzionamento degli enum<\/h2>\n<p>L\u2019esempio proposto di seguito, e ripreso dalla documentazione ufficiale, mostra la dichiarazione tramite il costrutto <code>enum<\/code> di un tipo enumerato che prende il nome di <code>Suit<\/code> e prevede quattro diversi valori introdotti tramite <code>case<\/code>:<\/p>\n<pre><code class=\"language-php\">\nenum Suit {\n  case Hearts;\n  case Diamonds;\n  case Clubs;\n  case Spades;\n}\n<\/code><\/pre>\n<p>In questi casi \u00e8 possibile assegnare le variabili ad uno di questi valori mentre una funzione pu\u00f2 prevedere una verifica del tipo ed \u00e8 possibile passare soltanto valori di quel determinato tipo. Quindi data una funzione di questo genere:<\/p>\n<pre><code class=\"language-php\">\nfunction pick_a_card(Suit $suit) { ... }\n<\/code><\/pre>\n<p>e dato:<\/p>\n<pre><code class=\"language-php\">\n$val = Suit::Diamonds;\n<\/code><\/pre>\n<p>non \u00e8 possibile effettuare una chiamata che non preveda il tipo scelto, come nel caso di:<\/p>\n<pre><code class=\"language-php\">\npick_a_card('Spades');\n<\/code><\/pre>\n<p>che produrrebbe un errore.<\/p>\n<p>In ogni caso un\u2019enumerazione pu\u00f2 avere zero o pi\u00f9 definizioni introdotte da <code>case<\/code> 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.<\/p>\n<h2>Backed Enum<\/h2>\n<p>I <strong>Backed Enum<\/strong> sono un tipo particolare di Enum utile per l\u2019introduzione di valori scalari ai vari casi proposti da <code>case<\/code>, ad esempio:<\/p>\n<pre><code class=\"language-php\">\nenum Suit: string {\n  case Hearts = 'H';\n  case Diamonds = 'D';\n  case Clubs = 'C';\n  case Spades = 'S';\n}\nprint Suit::Clubs-&gt;value;\n\/\/ Stampa \"C\"\n<\/code><\/pre>\n<p>Si possono avere Backed Enum di tipo intero o di tipo stringa mentre non \u00e8 possibile disporre simultaneamente di entrambi i tipi. Il costrutto non supporta la generazione automatica di equivalenti scalari, ad esempio sequenze di interi, e non \u00e8 possibile utilizzare il medesimo equivalente scalare per pi\u00f9 <code>case<\/code>. <\/p>\n<p><em>Fonte<\/em>: <a href=\"https:\/\/wiki.php.net\/rfc\/enumerations\" class=\"text-link text-link--special\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"underline\">PHP<\/span><i class=\"ico-external\"\/><\/a><\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/www.html.it\/02\/12\/2021\/php-8-1-gli-enum\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Parlando delle novit\u00e0 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&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_s2mail":""},"categories":[37],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 8.1: gli Enum | HTML.it - AGENZIA WEB Italia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.1: gli Enum | HTML.it - AGENZIA WEB Italia\" \/>\n<meta property=\"og:description\" content=\"Parlando delle novit\u00e0 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...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/\" \/>\n<meta property=\"og:site_name\" content=\"AGENZIA WEB Italia\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-02T21:03:34+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42\"},\"headline\":\"PHP 8.1: gli Enum | HTML.it\",\"datePublished\":\"2021-12-02T21:03:34+00:00\",\"dateModified\":\"2021-12-02T21:03:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/\"},\"wordCount\":431,\"publisher\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\"},\"articleSection\":[\"News\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/\",\"name\":\"PHP 8.1: gli Enum | HTML.it - AGENZIA WEB Italia\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#website\"},\"datePublished\":\"2021-12-02T21:03:34+00:00\",\"dateModified\":\"2021-12-02T21:03:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP 8.1: gli Enum | HTML.it\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#website\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\",\"name\":\"AGENZIA WEB Italia\",\"description\":\"Web design Web agency Italia\",\"publisher\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\",\"name\":\"Multimedia Web\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png\",\"contentUrl\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png\",\"width\":200,\"height\":57,\"caption\":\"Multimedia Web\"},\"image\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g\",\"caption\":\"admin\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP 8.1: gli Enum | HTML.it - AGENZIA WEB Italia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/","og_locale":"it_IT","og_type":"article","og_title":"PHP 8.1: gli Enum | HTML.it - AGENZIA WEB Italia","og_description":"Parlando delle novit\u00e0 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...","og_url":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/","og_site_name":"AGENZIA WEB Italia","article_published_time":"2021-12-02T21:03:34+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"admin","Tempo di lettura stimato":"2 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/#article","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/"},"author":{"name":"admin","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42"},"headline":"PHP 8.1: gli Enum | HTML.it","datePublished":"2021-12-02T21:03:34+00:00","dateModified":"2021-12-02T21:03:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/"},"wordCount":431,"publisher":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization"},"articleSection":["News"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/","name":"PHP 8.1: gli Enum | HTML.it - AGENZIA WEB Italia","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#website"},"datePublished":"2021-12-02T21:03:34+00:00","dateModified":"2021-12-02T21:03:34+00:00","breadcrumb":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-gli-enum-html-it\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.nycwebdesign.eu\/webdesign\/"},{"@type":"ListItem","position":2,"name":"PHP 8.1: gli Enum | HTML.it"}]},{"@type":"WebSite","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#website","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/","name":"AGENZIA WEB Italia","description":"Web design Web agency Italia","publisher":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.nycwebdesign.eu\/webdesign\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization","name":"Multimedia Web","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png","contentUrl":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-content\/uploads\/2016\/05\/multimediaweb1.png","width":200,"height":57,"caption":"Multimedia Web"},"image":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42","name":"admin","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/991cd68bbfd6f946517378a63fc3a1f7?s=96&d=mm&r=g","caption":"admin"}}]}},"_links":{"self":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts\/22519"}],"collection":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/comments?post=22519"}],"version-history":[{"count":0,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts\/22519\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/media?parent=22519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/categories?post=22519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/tags?post=22519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}