{"id":22517,"date":"2021-11-30T22:00:34","date_gmt":"2021-11-30T21:00:34","guid":{"rendered":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/"},"modified":"2021-11-30T22:00:34","modified_gmt":"2021-11-30T21:00:34","slug":"php-8-1-cosa-sono-le-fiber","status":"publish","type":"post","link":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/","title":{"rendered":"PHP 8.1: cosa sono le Fiber"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>Pur potendo contare su progetti come ReactPHP e Guzzle, fino ad ora <strong>PHP<\/strong> si \u00e8 evoluto nativamente come un linguaggio basato su codice sincrono, questo significa ad esempio che l\u2019esecuzione di una funzione viene interrotta fino alla restituzione di un risultato. <span id=\"more-405834\"\/><\/p>\n<p>Tale dinamica pu\u00f2 essere spiegata a larghe linee tramite il <a href=\"https:\/\/journal.stuffwithstuff.com\/2015\/02\/01\/what-color-is-your-function\/\" target=\"_blank\" rel=\"nofollow noopener\">problema<\/a> chiamato \u201c<em>Di che colore \u00e8 la tua funzione?<\/em>\u201c. Se infatti assumessimo che ogni funzione debba essere associata ad un colore e che il modo in cui avviene la chiamata ad una funzione dipenda da questo dato, avremmo l\u2019unica possibilit\u00e0 di chiamare una funzione di un determinato colore da un\u2019altra funzione dello stesso colore.<\/p>\n<h2>Funzioni sincrone e asincrone <\/h2>\n<p>Il meccanismo descritto non \u00e8 forse intuitivo ma fondamentalmente ci\u00f2 avviene perch\u00e9 le funzioni sincrone restituiscono valori mentre quelle asincrone invocano <em>callback<\/em>, nello stesso modo le funzioni sincrone possono offrire il loro risultato sotto forma di valore di ritorno mentre il risultato delle asincrone dipende sempre dal <em>callback<\/em>. Rispetto ad una sincrona una funzione asincrona modifica inoltre il modo in cui una funzione deve essere chiamata.<\/p>\n<p>Ora abbiamo che le funzioni sincrone non possono chiamare le asincrone mentre pu\u00f2 avvenire il contrario, ma per la chiamata ad una funzione asincrona \u00e8 necessario che l\u2019intero <strong>stack di chiamata<\/strong> sia asincrono. <\/p>\n<p>Per questa ragione, utilizzando un linguaggio che la supporta, se una funzione restituisce una promise in uno stack di chiamata il risultato non potr\u00e0 essere noto fino alla risoluzione della promise stessa, per far questo per\u00f2 l\u2019intero stack deve poter restituire una promise.<\/p>\n<h2>Fiber e funzioni asincrone<\/h2>\n<p>Per rimediare al limite dovuto alla mancanza di codice asincrono, <strong>PHP 8.1<\/strong> introduce il concetto di <strong>Fiber<\/strong> a cui fanno riferimento una classe omonima, una di riflessione (<code>ReflectionFiber<\/code>) e due classi per le eccezioni, <code>FiberError<\/code> e <code>FiberExit<\/code>.<\/p>\n<p>Le Fiber sono state implementate per rimuovere la differenza tra codice sincrono e asincrono consentendo di interrompere le funzioni senza che ci\u00f2 coinvolga il <em>call stack<\/em> nel suo insieme. In pratica le Fiber mettono in pausa lo stack di esecuzione, quindi per le chiamate dirette delle funzioni non si deve modificare il modo in cui esse sono invocate. Di seguito l\u2019esempio riportato nella RFC di PHP 8.1.<\/p>\n<pre><code class=\"language-php\">\nfinal class Fiber\n{\n    public function __construct(callable $callback) {}\n    public function start(mixed ...$args): mixed {}\n    public function resume(mixed $value = null): mixed {}\n    public function throw(Throwable $exception): mixed {}\n    public function isStarted(): bool {}\n    public function isSuspended(): bool {}\n    public function isRunning(): bool {}\n    public function isTerminated(): bool {}\n    public function getReturn(): mixed {}\n    public static function this(): ?self {}\n    public static function suspend(mixed $value = null): mixed {}\n}\n<\/code><\/pre>\n<p><code>new Fiber<\/code> genera un oggetto <code>Fiber<\/code> mentre <code>Fiber::suspend()<\/code> sospende l\u2019esecuzione della Fiber corrente e riprende l\u2019esecuzione tramite la chiamata a <code>Fiber-&gt;start()<\/code>, <code>Fiber-&gt;resume()<\/code> o <code>Fiber-&gt;throw()<\/code>. <\/p>\n<p><code>Fiber-&gt;resume()<\/code> pu\u00f2 riattivare una Fiber restituendo un valore da <code>Fiber::suspend()<\/code> mentre <code>Fiber-&gt;throw()<\/code> pu\u00f2 fare lo stesso se viene intercettata un\u2019eccezione.<\/p>\n<p><code>Fiber-&gt;getReturn()<\/code> restituisce un valore di ritorno dalla conclusione della Fiber mentre <code>Fiber::this()<\/code> fornir\u00e0 l\u2019istanza della in esecuzione o <code>NULL<\/code> se chiamato da <code>{main}<\/code>.<\/p>\n<p><em>Fonte<\/em>: <a href=\"https:\/\/wiki.php.net\/rfc\/fibers\" 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\/30\/11\/2021\/php-8-1-cosa-sono-le-fiber\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pur potendo contare su progetti come ReactPHP e Guzzle, fino ad ora PHP si \u00e8 evoluto nativamente come un linguaggio basato su codice sincrono, questo significa ad esempio che l\u2019esecuzione di una funzione viene interrotta fino alla restituzione di un risultato. Tale dinamica pu\u00f2 essere spiegata a larghe linee tramite il problema chiamato \u201cDi che&#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: cosa sono le Fiber - 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-cosa-sono-le-fiber\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.1: cosa sono le Fiber - AGENZIA WEB Italia\" \/>\n<meta property=\"og:description\" content=\"Pur potendo contare su progetti come ReactPHP e Guzzle, fino ad ora PHP si \u00e8 evoluto nativamente come un linguaggio basato su codice sincrono, questo significa ad esempio che l\u2019esecuzione di una funzione viene interrotta fino alla restituzione di un risultato. Tale dinamica pu\u00f2 essere spiegata a larghe linee tramite il problema chiamato \u201cDi che...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/\" \/>\n<meta property=\"og:site_name\" content=\"AGENZIA WEB Italia\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-30T21:00: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=\"3 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-cosa-sono-le-fiber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42\"},\"headline\":\"PHP 8.1: cosa sono le Fiber\",\"datePublished\":\"2021-11-30T21:00:34+00:00\",\"dateModified\":\"2021-11-30T21:00:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/\"},\"wordCount\":424,\"publisher\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization\"},\"articleSection\":[\"News\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/\",\"url\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/\",\"name\":\"PHP 8.1: cosa sono le Fiber - AGENZIA WEB Italia\",\"isPartOf\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/#website\"},\"datePublished\":\"2021-11-30T21:00:34+00:00\",\"dateModified\":\"2021-11-30T21:00:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.nycwebdesign.eu\/webdesign\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP 8.1: cosa sono le Fiber\"}]},{\"@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: cosa sono le Fiber - 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-cosa-sono-le-fiber\/","og_locale":"it_IT","og_type":"article","og_title":"PHP 8.1: cosa sono le Fiber - AGENZIA WEB Italia","og_description":"Pur potendo contare su progetti come ReactPHP e Guzzle, fino ad ora PHP si \u00e8 evoluto nativamente come un linguaggio basato su codice sincrono, questo significa ad esempio che l\u2019esecuzione di una funzione viene interrotta fino alla restituzione di un risultato. Tale dinamica pu\u00f2 essere spiegata a larghe linee tramite il problema chiamato \u201cDi che...","og_url":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/","og_site_name":"AGENZIA WEB Italia","article_published_time":"2021-11-30T21:00:34+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"admin","Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/#article","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/"},"author":{"name":"admin","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#\/schema\/person\/c0748e23499fac2fd73b79d1379fdf42"},"headline":"PHP 8.1: cosa sono le Fiber","datePublished":"2021-11-30T21:00:34+00:00","dateModified":"2021-11-30T21:00:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/"},"wordCount":424,"publisher":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#organization"},"articleSection":["News"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/","url":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/","name":"PHP 8.1: cosa sono le Fiber - AGENZIA WEB Italia","isPartOf":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/#website"},"datePublished":"2021-11-30T21:00:34+00:00","dateModified":"2021-11-30T21:00:34+00:00","breadcrumb":{"@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.nycwebdesign.eu\/webdesign\/php-8-1-cosa-sono-le-fiber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.nycwebdesign.eu\/webdesign\/"},{"@type":"ListItem","position":2,"name":"PHP 8.1: cosa sono le Fiber"}]},{"@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\/22517"}],"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=22517"}],"version-history":[{"count":0,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/posts\/22517\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/media?parent=22517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/categories?post=22517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nycwebdesign.eu\/webdesign\/wp-json\/wp\/v2\/tags?post=22517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}