{"id":74984,"date":"2023-11-29T08:25:37","date_gmt":"2023-11-29T07:25:37","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=74984&#038;preview=true&#038;preview_id=74984"},"modified":"2023-12-04T12:11:46","modified_gmt":"2023-12-04T11:11:46","slug":"php-8-3","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/","title":{"rendered":"PHP 8.3: cosa c&#8217;\u00e8 di nuovo e cosa \u00e8 cambiato nell&#8217;ultima versione"},"content":{"rendered":"<p>PHP 8.3 \u00e8 stato rilasciato puntualmente il 23 novembre e contiene molte nuove funzionalit\u00e0 e miglioramenti rispetto al <a href=\"https:\/\/kinsta.com\/it\/blog\/php-8-2\/\">lancio di PHP 8.2<\/a>. Anche se \u00e8 ufficialmente considerata una versione minore, alcune delle modifiche apportate dalla versione 8.3 potrebbero avere un impatto diretto sul vostro lavoro con PHP, aiutandovi a codificare pi\u00f9 velocemente e con meno bug.<\/p>\n<p>Vediamo i cambiamenti pi\u00f9 importanti, e anche quelli meno importanti, apportati da quest&#8217;ultima versione.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Nuove funzionalit\u00e0 e miglioramenti in PHP 8.3<\/h2>\n<p>Iniziamo con l&#8217;esplorare le caratteristiche di PHP 8.3 che sono state messe sotto i riflettori.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"-1\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Costanti di classe tipizzate<\/h3>\n<p>La possibilit\u00e0 di dichiarare i tipi per le propriet\u00e0 delle classi \u00e8 disponibile fin da <a href=\"https:\/\/kinsta.com\/it\/blog\/php-7-4\/\">PHP 7.4<\/a>. Tuttavia, nonostante le numerose modifiche apportate alla tipizzazione di PHP nel corso degli anni, non era mai stata estesa alle costanti, almeno fino a oggi.<\/p>\n<p>Le costanti di classe &#8211; che includono anche le costanti interface, trait ed enum &#8211; possono essere tipizzate in PHP 8.3, riducendo la probabilit\u00e0 che gli sviluppatori si allontanino dall&#8217;intenzione che sta dietro alla dichiarazione iniziale di una costante.<\/p>\n<p>Ecco un semplice esempio che utilizza un&#8217;interfaccia:<\/p>\n<pre><code class=\"language-php\">\/\/ Legal:\ninterface ConstTest {\n    \/\/ Declared type and value are both strings\n    const string VERSION = \"PHP 8.3\";\n}\n\n\/\/ Illegal:\ninterface ConstTest {\n    \/\/ Type and value mismatch in this initial declaration\n    const float VERSION = \"PHP 8.3\";\n}<\/code><\/pre>\n<p>Il vero valore di queste <a href=\"https:\/\/wiki.php.net\/rfc\/typed_class_constants\" target=\"_blank\" rel=\"noopener noreferrer\">costanti di classe tipizzate<\/a> si rivela quando si lavora in classi derivate dalle dichiarazioni di base. Sebbene una classe figlia possa spesso assegnare un nuovo valore a una costante, PHP 8.3 pu\u00f2 aiutare a evitare di cambiare accidentalmente il suo tipo in modo che diventi incompatibile con la dichiarazione iniziale:<\/p>\n<pre><code class=\"language-php\">class ConstTest {\n    const string VERSION = \"PHP 8.2\";\n}\n\nclass MyConstTest extends ConstTest {\n\n    \/\/ Legal:\n    \/\/ It's OK to change the value of VERSION here\n    const string VERSION = \"PHP 8.3\";\n\n    \/\/ Illegal:\n    \/\/ Type must be declared if it was specified in the base class\n    const VERSION = \"PHP 8.3\";\n\n    \/\/ Illegal:\n    \/\/ In this case, we can't change the type declared in the \n    \/\/ base class, even if the new type and its value are compatible.\n    const float VERSION = 8.3;\n}<\/code><\/pre>\n<p>Tenete presente che il tipo assegnato a una costante di classe pu\u00f2 variare quando si &#8220;restringono&#8221; pi\u00f9 tipi o si utilizza un tipo altrimenti compatibile:<\/p>\n<pre><code class=\"language-php\">class ConstTest {\n    const string|float VERSION = \"PHP 8.2\";\n}\n\nclass MyConstTest extends ConstTest {\n\n    \/\/ Legal:\n    \/\/ Here, it's OK to narrow the type declaration to string or float\n    const string VERSION = \"PHP 8.3\";\n    const float VERSION = 8.3;\n\n    \/\/ Legal:\n    \/\/ Value could be an int, but it's compatible with float \n    const float VERSION = 8;\n\n    \/\/ Illegal:\n    \/\/ We can't widen the type options here to include int\n    const string|float|int VERSION = 8;\n}<\/code><\/pre>\n<p>Due tipi supportati per altre propriet\u00e0 quando si convalidano i valori di ritorno &#8211; <code>void<\/code> e <code>never<\/code> &#8211; non sono supportati come tipi di costanti di classe.<\/p>\n<h3>Una nuova funzione <code>json_validate()<\/code><\/h3>\n<p>Quando si lavora con dati codificati in JSON, \u00e8 utile sapere se il payload \u00e8 sintatticamente valido prima di tentare di utilizzarlo.<\/p>\n<p>Nelle versioni precedenti di PHP, gli sviluppatori utilizzavano la funzione <code>json_decode()<\/code> per verificare la presenza di errori durante i tentativi di trasformare i dati JSON in array associativi o oggetti. La nuova funzione di PHP 8.3 <code><a href=\"https:\/\/www.php.net\/manual\/en\/function.json-validate.php\" target=\"_blank\" rel=\"noopener noreferrer\">json_validate()<\/a><\/code> esegue il controllo degli errori senza utilizzare tutta la memoria necessaria per costruire queste strutture di array o oggetti.<\/p>\n<p>Quindi, in passato, potreste aver convalidato un payload JSON come questo:<\/p>\n<pre><code class=\"language-php\">$obj = json_decode($maybeJSON);\n\nif (json_last_error() === JSON_ERROR_NONE) {\n    \/\/ Probably do something with $obj   \n}<\/code><\/pre>\n<p>Se non avete intenzione di fare subito qualcosa con <code>$obj<\/code> nell&#8217;esempio precedente, sono molte le risorse utilizzate solo per confermare la validit\u00e0 del payload JSON originale. In PHP 8.3, potreste fare qualcosa di simile e risparmiare memoria:<\/p>\n<pre><code class=\"language-php\">if (json_validate($maybeJSON)) {\n    \/\/ Do something with $maybeJSON   \n}<\/code><\/pre>\n<p><strong>Nota:<\/strong> non ha molto senso utilizzare <code>json_validate()<\/code> e poi passare immediatamente i dati attraverso <code>json_decode()<\/code>, utilizzando comunque le risorse di memoria di decode. Sarebbe pi\u00f9 sensato utilizzare la nuova funzione per convalidare il JSON prima di memorizzarlo da qualche parte o consegnarlo come risposta a una richiesta.<\/p>\n<h3>Deep cloning delle propriet\u00e0 di <code>readonly<\/code><\/h3>\n<p>La possibilit\u00e0 di dichiarare le propriet\u00e0 di singole classi come <code>readonly<\/code> \u00e8 apparsa in <a href=\"https:\/\/kinsta.com\/it\/blog\/php-8-1\/\">PHP 8.1<\/a>. PHP 8.2 ha introdotto la possibilit\u00e0 di assegnare questo attributo a <a href=\"https:\/\/kinsta.com\/it\/blog\/php-8-2\/#new-readonly-classes\" target=\"_blank\" rel=\"noopener noreferrer\">un&#8217;intera classe<\/a>. Tuttavia, molti sviluppatori ritenevano che i vincoli imposti quando si lavorava con classi contenenti tali propriet\u00e0 ostacolassero una programmazione utile.<\/p>\n<p>Una RFC per <a href=\"https:\/\/wiki.php.net\/rfc\/readonly_amendments\" target=\"_blank\" rel=\"noopener noreferrer\">modificare il comportamento di <code>readonly<\/code><\/a> ha avanzato due proposte:<\/p>\n<ol>\n<li>Permettere alle classi che non sono <code>readonly<\/code> di estendere le classi che lo sono<\/li>\n<li>Permettere alle propriet\u00e0 di <code>readonly<\/code> di essere reinizializzate durante la clonazione<\/li>\n<\/ol>\n<p>La seconda proposta \u00e8 stata inserita in PHP 8.3. Il nuovo approccio consente alle istanze di una classe con propriet\u00e0 <code>readonly<\/code> di essere reinizializzate all&#8217;interno del metodo magico <code>__clone<\/code> (anche tramite funzioni invocate da <code>__clone<\/code>).<\/p>\n<p>Questo esempio di codice tratto dalla RFC ne mostra il funzionamento:<\/p>\n<pre><code class=\"language-php\">class Foo {\n    public function __construct(\n        public readonly DateTime $bar,\n        public readonly DateTime $baz\n    ) {}\n \n    public function __clone() {\n        \/\/ $bar will get a new DateTime when clone is invoked\n        $this-&gt;bar = clone $this-&gt;bar; \n\n        \/\/ And this function will be called\n        $this-&gt;cloneBaz();\n    }\n \n    private function cloneBaz() {\n       \/\/ This is legal when called from within __clone\n        unset($this-&gt;baz); \n    }\n}\n \n$foo = new Foo(new DateTime(), new DateTime());\n$foo2 = clone $foo;<\/code><\/pre>\n<h3>Nuovo attributo <code>#[\\Override]<\/code><\/h3>\n<p>Quando si implementano le interfacce in PHP, i programmatori forniscono funzionalit\u00e0 dettagliate per i metodi denominati in tali interfacce. Quando si crea un&#8217;istanza di una classe, i programmatori possono sovrascrivere un metodo parent creando una versione alternativa con lo stesso nome e una firma compatibile nel child.<\/p>\n<p>Un problema \u00e8 che i programmatori potrebbero <em>pensare<\/em> di implementare un metodo dell&#8217;interfaccia o di sovrascrivere un metodo parent quando non \u00e8 cos\u00ec. Potrebbero creare qualcosa completamente separato a causa di un errore di battitura nel nome del metodo della classe child o perch\u00e9 i metodi sono stati rimossi o rinominati nel codice del parent.<\/p>\n<p>PHP 8.3 introduce l&#8217;attributo <code>#[\\Override]<\/code> per aiutare i programmatori a chiarire che un metodo deve avere una certa discendenza all&#8217;interno del codice.<\/p>\n<p>Ecco un esempio di base:<\/p>\n<pre><code class=\"language-php\">class A {\n    protected function ovrTest(): void {}\n}\n\n\/\/ This will work because ovrTest() \n\/\/ can be found in the parent class\nclass B extends A {\n    #[\\Override]\n    public function ovrTest(): void {}\n}\n\n\/\/ This will fail because ovrBest() \n\/\/ (probably a typo) is not in the parent\nclass C extends A {\n    #[\\Override]\n    public function ovrBest(): void {}\n}<\/code><\/pre>\n<h3>Recupero dinamico di costanti di classe e membri di enum<\/h3>\n<p>A differenza di altre propriet\u00e0 nel codice PHP, la ricerca di costanti di classe e membri di Enum con nomi di variabili \u00e8 stata un po&#8217; complicata. Prima di PHP 8.3, si poteva fare utilizzando la funzione <code>constant()<\/code> come in questo caso:<\/p>\n<pre><code class=\"language-php\">class MyClass {\n    public const THE_CONST = 9;\n}\n\nenum MyEnum int {\n    case FirstMember = 9;\n    case SecondMember = 9;\n}\n\n$constantName = 'THE_CONST';\n$memberName = 'FirstMember';\n\necho constant('MyClass::' . $constantName);\necho constant('MyEnum::' . $memberName)-&gt;value;<\/code><\/pre>\n<p>Ora, utilizzando le stesse definizioni di classe ed Enum di cui sopra, si pu\u00f2 ottenere lo stesso risultato con il <a href=\"https:\/\/wiki.php.net\/rfc\/dynamic_class_constant_fetch\" target=\"_blank\" rel=\"noopener noreferrer\">recupero dinamico delle costanti<\/a> di PHP 8.3 in questo modo:<\/p>\n<pre><code class=\"language-php\">$constantName = 'THE_CONST';\n$memberName = 'FirstMember';\n\necho MyClass::{$constantName};\necho MyEnum::{$memberName}-&gt;value;<\/code><\/pre>\n<h3>Nuovo metodo <code>getBytesFromString()<\/code><\/h3>\n<p>Avete mai desiderato generare stringhe casuali utilizzando una raccolta di caratteri gi\u00e0 approvata? Ora potete farlo facilmente grazie al metodo <code><a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getbytesfromstring.php\" target=\"_blank\" rel=\"noopener noreferrer\">getBytesFromString()<\/a><\/code> che \u00e8 stato aggiunto all&#8217;estensione Random di PHP 8.3.<\/p>\n<p>Questo nuovo metodo \u00e8 semplice: si passa una stringa di caratteri come materiale di partenza e si specifica quanti se ne vogliono utilizzare. Il metodo selezioner\u00e0 quindi dei byte dalla stringa in modo casuale fino a raggiungere la lunghezza specificata.<\/p>\n<p>Ecco un semplice esempio:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$alpha = 'ABCDEFGHJKMNPQRSTVWXYZ';\n\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"MBXGWL\"\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"LESPMG\"\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"NVHWXC\"<\/code><\/pre>\n<p>\u00c8 possibile che la lunghezza richiesta dell&#8217;output casuale abbia pi\u00f9 byte della stringa in ingresso:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$nums = '123456';\n\n$rando-&gt;getBytesFromString($nums, 10); \/\/  \"2526341615\"<\/code><\/pre>\n<p>Con una stringa di input composta da caratteri unici, ognuno di essi ha le stesse probabilit\u00e0 di essere selezionato per il risultato casuale. Tuttavia, i caratteri possono essere ponderati perch\u00e9 appaiono pi\u00f9 spesso di altri nell&#8217;input. Ad esempio:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$weighted = 'AAAAA12345';\n\n$rando-&gt;getBytesFromString($weighted, 5); \/\/  \"1AA53\"\n$rando-&gt;getBytesFromString($weighted, 10); \/\/  \"42A5A1AA3A\"<\/code><\/pre>\n<h3>Nuovi metodi <code>getFloat()<\/code> e <code>nextFloat()<\/code><\/h3>\n<p>Ampliando l&#8217;estensione Random, PHP 8.3 introduce due nuovi metodi per generare valori casuali float: <code>getFloat()<\/code> e <code>nextFloat()<\/code>.<\/p>\n<p>Ecco un esempio:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\n\/\/ Generate a float value between a minimum \n\/\/  value of 0 and a maximum value of 5\n$rando-&gt;getFloat(0,5); \/\/ 2.3937446906217<\/code><\/pre>\n<p>Il metodo <code>getFloat()<\/code> accetta anche un terzo parametro dopo i valori minimo e massimo. Utilizzando un Enum <strong>Random\\IntervalBoundary<\/strong> \u00e8 possibile determinare se i valori minimi e massimi possono essere restituiti dalla funzione.<\/p>\n<p>Ecco le regole:<\/p>\n<ul>\n<li>IntervalBoundary::ClosedOpen: il valore minimo pu\u00f2 essere restituito, ma non quello massimo<\/li>\n<li>IntervalloBoundary::ClosedClosed: possono essere restituiti sia il minimo che il massimo<\/li>\n<li>IntervalBoundary::OpenClosed: il valore minimo non pu\u00f2 essere restituito, quello massimo s\u00ec<\/li>\n<li>IntervalBoundary::OpenOpen: non possono essere restituiti n\u00e9 il minimo n\u00e9 il massimo<\/li>\n<\/ul>\n<p>Quando si utilizza <code>getFloat()<\/code> senza specificare l&#8217;Enum come terzo parametro, il valore predefinito \u00e8 <strong>IntervalBoundary::ClosedOpen<\/strong>.<\/p>\n<p>Un esempio utile fornito dalla <a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getfloat.php\" target=\"_blank\" rel=\"noopener noreferrer\">documentazione della nuova funzione<\/a> genera coordinate casuali di longitudine e latitudine, dove la latitudine pu\u00f2 includere -90 e 90, ma la longitudine non pu\u00f2 includere sia -180 che 180 (poich\u00e9 sono uguali):<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\nprintf(\n    \"Lat: %+.6f Long: %+.6f\",\n    $rando-&gt;getFloat(-90, 90, \\Random\\IntervalBoundary::ClosedClosed),\n\n    \/\/ -180 will not be used \n    $rando-&gt;getFloat(-180, 180, \\Random\\IntervalBoundary::OpenClosed),\n);<\/code><\/pre>\n<p>Il nuovo metodo <code>nextFloat()<\/code> \u00e8 essenzialmente uguale all&#8217;utilizzo di <code>getFloat()<\/code> per richiedere un valore casuale che va da 0 a meno di 1:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\n$rando-&gt;nextFloat(); \/\/ 0.3767414902847<\/code><\/pre>\n<h2>Altri cambiamenti minori in PHP 8.3<\/h2>\n<p>PHP 8.3 include anche una serie di altre nuove funzioni e modifiche minori. Le citiamo di seguito con i link alle risorse aggiuntive (se disponibili):<\/p>\n<ul>\n<li>Nuovi metodi per la classe DOMElement: <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.getattributenames.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::getAttributeNames()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.insertadjacentelement.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::insertAdjacentElement()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.insertadjacenttext.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::insertAdjacentText()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.toggleattribute.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::toggleAttribute()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domnode.contains.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMNode::contains()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domnode.getrootnode.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMNode::getRootNode()<\/code><\/a>,<a href=\"https:\/\/www.php.net\/manual\/en\/domnode.isequalnode.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code> DOMNode::isEqualNode()<\/code><\/a>, DOMNameSpaceNode::contains(), e <a href=\"https:\/\/www.php.net\/manual\/en\/domparentnode.replacechildren.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>MParentNode::replaceChildren()<\/code><\/a>.<\/li>\n<li>Nuovi metodi per la classe IntlCalendar: <a href=\"https:\/\/www.php.net\/manual\/en\/intlcalendar.setdate.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlCalendar::setDate()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/intlcalendar.setdatetime.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlCalendar::setDateTime()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/intlgregoriancalendar.createfromdate.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlGregorianCalendar::createFromDate()<\/code><\/a>, e <a href=\"https:\/\/www.php.net\/manual\/en\/intlgregoriancalendar.createfromdatetime.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlGregorianCalendar::createFromDateTime()<\/code><\/a>.<\/li>\n<li>Nuove funzioni LDAP: ldap_connect_wallet() e ldap_exop_sync().<\/li>\n<li>Nuova funzione stringa multibyte <a href=\"https:\/\/www.php.net\/manual\/en\/function.mb-str-pad.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>mb_str_pad()<\/code><\/a>.<\/li>\n<li>Nuove funzioni POSIX: <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-sysconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_sysconf()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-pathconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_pathconf()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-fpathconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_fpathconf()<\/code><\/a>, e <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-eaccess.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_eaccess()<\/code><\/a>.<\/li>\n<li>Nuovo metodo <a href=\"https:\/\/www.php.net\/manual\/en\/reflectionmethod.createfrommethodname.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionMethod::createFromMethodName()<\/code><\/a>.<\/li>\n<li>Nuova funzione socket: <a href=\"https:\/\/www.php.net\/manual\/en\/function.socket-atmark.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>socket_atmark()<\/code><\/a>.<\/li>\n<li>Nuove funzioni per le stringhe: <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-increment.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>str_increment()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-decrement.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>str_decrement()<\/code><\/a>, e<a href=\"https:\/\/www.php.net\/manual\/en\/function.stream-context-set-options.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code> stream_context_set_options()<\/code><\/a>.<\/li>\n<li>Nuovo metodo della classe ZipArchive: <a href=\"https:\/\/www.php.net\/manual\/en\/ziparchive.getarchiveflag.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ZipArchive::getArchiveFlag()<\/code><\/a>.<\/li>\n<li>Nuova impostazione INI per impostare la dimensione massima consentita dello stack: <a href=\"https:\/\/www.php.net\/manual\/en\/migration83.other-changes.php#migration83.other-changes.ini\" target=\"_blank\" rel=\"noopener noreferrer\"><code>zend.max_allowed_stack_size<\/code><\/a>.<\/li>\n<\/ul>\n<h2>Deprecazioni in PHP 8.3<\/h2>\n<p>Con ogni nuova versione di PHP, alcune funzioni e impostazioni vengono segnalate per essere rimosse. Una volta deprecate, queste funzioni non sono raccomandate per un uso continuativo e genereranno degli avvisi in molti log quando appariranno nel codice in esecuzione.<\/p>\n<p>Ecco un elenco di deprecazioni in PHP 8.3, con link a ulteriori informazioni:<\/p>\n<ul>\n<li>La costante U_MULTIPLE_DECIMAL_SEPERATORS \u00e8 deprecata in favore di U_MULTIPLE_DECIMAL_SEPARATORS.<\/li>\n<li>La variante <a href=\"https:\/\/www.php.net\/manual\/en\/random.constants.php#constant.mt-rand-php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>3MT_RAND_PHP<\/code><\/a> Mt19937 \u00e8 una variante deprecata.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/reflectionclass.getstaticproperties.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionClass::getStaticProperties()<\/code><\/a> non \u00e8 pi\u00f9 annullabile.<\/li>\n<li>Impostazioni INI <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.active\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.active<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.bail\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.bail<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.callback\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.callback<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.exception\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.exception<\/code><\/a>, e <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.warning\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.warning<\/code><\/a> sono deprecate.<\/li>\n<li>Le chiamate <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_class()<\/code><\/a> e <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-parent-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_parent_class()<\/code><\/a> senza argomenti sono state deprecate.<\/li>\n<\/ul>\n<h2>Riepilogo<\/h2>\n<p>Abbiamo esaminato i cambiamenti pi\u00f9 significativi apportati a PHP 8.3. Per un elenco dettagliato di tutti gli aggiornamenti di questa versione, potete consultare il <a href=\"https:\/\/www.php.net\/ChangeLog-8.php#PHP_8_3\" target=\"_blank\" rel=\"noopener noreferrer\">changelog ufficiale<\/a> del rilascio. Se avete intenzione di spostare il codice su una piattaforma con PHP pi\u00f9 recente, la <a href=\"https:\/\/www.php.net\/manual\/en\/migration83.php\" target=\"_blank\" rel=\"noopener noreferrer\">Guida alla migrazione da 8.2 a 8.3<\/a> pu\u00f2 aiutarvi a farlo senza problemi.<\/p>\n<p>Se \u00e8 vostro compito installare PHP sui server di sviluppo o di produzione, la versione 8.3 \u00e8 <a href=\"https:\/\/www.php.net\/downloads.php\" target=\"_blank\" rel=\"noopener noreferrer\">pronta per essere scaricata<\/a>.<\/p>\n<p>Se siete clienti Kinsta, penseremo noi a rendere disponibile questa release sui server dei vostri progetti sull&#8217;<a href=\"https:\/\/kinsta.com\/it\/hosting-wordpress\/\">Hosting WordPress gestito<\/a> o sull&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP 8.3 \u00e8 stato rilasciato puntualmente il 23 novembre e contiene molte nuove funzionalit\u00e0 e miglioramenti rispetto al lancio di PHP 8.2. Anche se \u00e8 ufficialmente &#8230;<\/p>\n","protected":false},"author":259,"featured_media":74985,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26188],"class_list":["post-74984","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-aggiornamenti-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 8.3: cosa c&#039;\u00e8 di nuovo e cosa \u00e8 cambiato nell&#039;ultima release<\/title>\n<meta name=\"description\" content=\"PHP 8.3 \u00e8 stato distribuito, diamo un&#039;occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.3: cosa c&#039;\u00e8 di nuovo e cosa \u00e8 cambiato nell&#039;ultima versione\" \/>\n<meta property=\"og:description\" content=\"PHP 8.3 \u00e8 stato distribuito, diamo un&#039;occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-29T07:25:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-04T11:11:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Steve Bonisteel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"PHP 8.3 \u00e8 stato distribuito, diamo un&#039;occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"PHP 8.3: cosa c&#8217;\u00e8 di nuovo e cosa \u00e8 cambiato nell&#8217;ultima versione\",\"datePublished\":\"2023-11-29T07:25:37+00:00\",\"dateModified\":\"2023-12-04T11:11:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/\"},\"wordCount\":1379,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/\",\"name\":\"PHP 8.3: cosa c'\u00e8 di nuovo e cosa \u00e8 cambiato nell'ultima release\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png\",\"datePublished\":\"2023-11-29T07:25:37+00:00\",\"dateModified\":\"2023-12-04T11:11:46+00:00\",\"description\":\"PHP 8.3 \u00e8 stato distribuito, diamo un'occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Aggiornamenti PHP\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/aggiornamenti-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PHP 8.3: cosa c&#8217;\u00e8 di nuovo e cosa \u00e8 cambiato nell&#8217;ultima versione\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"caption\":\"Steve Bonisteel\"},\"description\":\"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PHP 8.3: cosa c'\u00e8 di nuovo e cosa \u00e8 cambiato nell'ultima release","description":"PHP 8.3 \u00e8 stato distribuito, diamo un'occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.","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:\/\/kinsta.com\/it\/blog\/php-8-3\/","og_locale":"it_IT","og_type":"article","og_title":"PHP 8.3: cosa c'\u00e8 di nuovo e cosa \u00e8 cambiato nell'ultima versione","og_description":"PHP 8.3 \u00e8 stato distribuito, diamo un'occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.","og_url":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-11-29T07:25:37+00:00","article_modified_time":"2023-12-04T11:11:46+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png","type":"image\/png"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"PHP 8.3 \u00e8 stato distribuito, diamo un'occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Steve Bonisteel","Tempo di lettura stimato":"10 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"PHP 8.3: cosa c&#8217;\u00e8 di nuovo e cosa \u00e8 cambiato nell&#8217;ultima versione","datePublished":"2023-11-29T07:25:37+00:00","dateModified":"2023-12-04T11:11:46+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/"},"wordCount":1379,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/php-8-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/","url":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/","name":"PHP 8.3: cosa c'\u00e8 di nuovo e cosa \u00e8 cambiato nell'ultima release","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png","datePublished":"2023-11-29T07:25:37+00:00","dateModified":"2023-12-04T11:11:46+00:00","description":"PHP 8.3 \u00e8 stato distribuito, diamo un'occhiata insieme ad alcune importanti novit\u00e0 e aggiornamenti della release.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/php-8-3\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/11\/whats-new-in-php-83.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/php-8-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Aggiornamenti PHP","item":"https:\/\/kinsta.com\/it\/argomenti\/aggiornamenti-php\/"},{"@type":"ListItem","position":3,"name":"PHP 8.3: cosa c&#8217;\u00e8 di nuovo e cosa \u00e8 cambiato nell&#8217;ultima versione"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","caption":"Steve Bonisteel"},"description":"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.","url":"https:\/\/kinsta.com\/it\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/74984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=74984"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/74984\/revisions"}],"predecessor-version":[{"id":75104,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/74984\/revisions\/75104"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/fr"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/es"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/translations\/de"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74984\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/74985"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=74984"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=74984"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=74984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}