{"id":66510,"date":"2024-01-13T08:13:14","date_gmt":"2024-01-13T07:13:14","guid":{"rendered":"https:\/\/gtechgroup.it\/?p=66510"},"modified":"2024-01-13T08:13:14","modified_gmt":"2024-01-13T07:13:14","slug":"php-8-3-le-novita-e-le-modifiche-dellultima-versione","status":"publish","type":"post","link":"https:\/\/nuovosito.gtechgroup.it\/blog\/php-8-3-le-novita-e-le-modifiche-dellultima-versione\/","title":{"rendered":"PHP 8.3: Le Novit\u00e0 e le Modifiche dell&#8217;Ultima Versione"},"content":{"rendered":"<p>PHP 8.3, rilasciato il 23 novembre, ha introdotto notevoli novit\u00e0 e miglioramenti rispetto alla sua versione precedente, PHP 8.2. Questa versione, pur essendo considerata &#8220;minore&#8221;, porta con s\u00e9 cambiamenti significativi che possono impattare notevolmente sullo sviluppo PHP. Scopriamo insieme le principali novit\u00e0 e gli aggiornamenti di PHP 8.3.<\/p>\n<p><strong>Nuove Funzionalit\u00e0 e Miglioramenti in PHP 8.3<\/strong> PHP 8.3 ha introdotto diverse nuove funzionalit\u00e0 e miglioramenti:<\/p>\n<h2><strong>Costanti di Classe Tipizzate in PHP 8.3: Una Rivoluzione nella Programmazione<\/strong><\/h2>\n<p>PHP 8.3 introduce una funzionalit\u00e0 rivoluzionaria: la tipizzazione delle costanti di classe. Sebbene PHP avesse introdotto la tipizzazione per le propriet\u00e0 di classe gi\u00e0 con PHP 7.4, questa innovazione non si era ancora estesa alle costanti. Fino ad ora.<\/p>\n<p>La nuova versione estende la tipizzazione alle costanti di classe, includendo anche quelle in interfacce, trait ed enum. Questa modifica ha l&#8217;importante vantaggio di minimizzare il rischio che gli sviluppatori si discostino dall&#8217;intento originale di una costante, garantendo maggiore chiarezza e sicurezza nel codice.<\/p>\n<p>Per illustrare, ecco un esempio pratico:<code><\/code><\/p>\n<p><code>\/\/ Corretto:<\/code><br \/>\n<code>interface ConstTest {<\/code><br \/>\n<code>const string VERSION = \"PHP 8.3\"; \/\/ Tipo e valore sono entrambi stringhe<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code><\/code><\/p>\n<p><code>\/\/ Errato:<\/code><br \/>\n<code>interface ConstTest {<\/code><br \/>\n<code>const float VERSION = \"PHP 8.3\"; \/\/ Mancata corrispondenza tra tipo e valore<\/code><br \/>\n<code>}<\/code><\/p>\n<p>L&#8217;efficacia delle costanti di classe tipizzate diventa evidente quando si lavora con classi derivate. Nelle versioni precedenti, una sotto-classe poteva cambiare il valore di una costante, ma con PHP 8.3, ora \u00e8 possibile prevenire cambiamenti accidentali del tipo di una costante, preservando la coerenza con la dichiarazione originale.<\/p>\n<p>Ad esempio:<\/p>\n<p><code>class ConstTest {<\/code><br \/>\n<code>const string VERSION = \"PHP 8.2\";<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>class MyConstTest extends ConstTest {<\/code><br \/>\n<code>\/\/ Corretto: cambiare il valore di VERSION \u00e8 permesso<\/code><br \/>\n<code>const string VERSION = \"PHP 8.3\";<\/code><\/p>\n<p><code>\/\/ Errato: il tipo deve essere dichiarato come nella classe base<\/code><br \/>\n<code>const VERSION = \"PHP 8.3\";<\/code><\/p>\n<p><code>\/\/ Errato: non \u00e8 possibile cambiare il tipo dichiarato nella classe base<\/code><br \/>\n<code>const float VERSION = 8.3;<\/code><br \/>\n<code>}<\/code><\/p>\n<p>Da notare che \u00e8 possibile &#8220;restringere&#8221; il tipo di una costante di classe in una sottoclasse, utilizzando un tipo compatibile o pi\u00f9 specifico:<\/p>\n<p><code>class ConstTest {<\/code><br \/>\n<code>const string|float VERSION = \"PHP 8.2\";<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>class MyConstTest extends ConstTest {<\/code><br \/>\n<code>\/\/ Corretto: \u00e8 possibile specificare il tipo come stringa o float<\/code><br \/>\n<code>const string VERSION = \"PHP 8.3\";<\/code><br \/>\n<code>const float VERSION = 8.3;<\/code><\/p>\n<p><code>\/\/ Corretto: anche se il valore potrebbe essere un int, \u00e8 compatibile con float<\/code><br \/>\n<code>const float VERSION = 8;<\/code><\/p>\n<p><code>\/\/ Errato: non \u00e8 possibile ampliare le opzioni di tipo includendo int<\/code><br \/>\n<code>const string|float|int VERSION = 8;<\/code><br \/>\n<code>}<\/code><\/p>\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&amp;]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"82ad32ec-8f38-4c89-ad8b-f81f03d02d16\">\n<div class=\"markdown prose w-full break-words dark:prose-invert light\">\n<p>Tuttavia, \u00e8 importante sottolineare che due tipi, <code>void<\/code> e <code>never<\/code>, ampiamente utilizzati per le propriet\u00e0 e<\/p>\n<\/div>\n<\/div>\n<div class=\"min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&amp;]:mt-5 overflow-x-auto\" data-message-author-role=\"assistant\" data-message-id=\"543a12b6-8916-4e5f-9370-805805652077\">\n<div class=\"markdown prose w-full break-words dark:prose-invert light\">\n<p>i valori di ritorno, non sono attualmente supportati come tipi per le costanti di classe in PHP 8.3.<\/p>\n<p>In sintesi, la tipizzazione delle costanti di classe in PHP 8.3 rappresenta un salto di qualit\u00e0 nello sviluppo software. Fornisce ai programmatori uno strumento aggiuntivo per garantire che il codice sia non solo funzionale, ma anche preciso e fedele alle intenzioni originali, riducendo errori e migliorando la leggibilit\u00e0 e la manutenibilit\u00e0 del codice. Questa novit\u00e0 segna un&#8217;ulteriore evoluzione della tipizzazione in PHP, consolidando la sua posizione come linguaggio di programmazione moderno e robusto.<\/p>\n<h2><strong>Nuova Funzione in PHP 8.3: json_validate()<\/strong><\/h2>\n<p>La manipolazione di <strong>dati codificati in JSON<\/strong> \u00e8 una pratica comune nello sviluppo web. In PHP 8.3, una nuova funzione, <code>json_validate()<\/code>, \u00e8 stata introdotta per migliorare significativamente questo processo. Questa funzione risulta particolarmente utile per verificare la validit\u00e0 sintattica di un payload JSON prima di procedere con il suo utilizzo.<\/p>\n<p>Nelle versioni precedenti di PHP, gli sviluppatori si affidavano alla funzione <code>json_decode()<\/code> per controllare gli errori durante la conversione dei dati JSON in array associativi o oggetti. Tuttavia, questo metodo richiedeva l&#8217;uso di risorse significative per costruire le strutture di array o oggetti, anche quando il solo scopo era la verifica dell&#8217;integrit\u00e0 del JSON.<\/p>\n<p>Ecco un esempio di come veniva utilizzata la <code>json_decode()<\/code> per convalidare un payload JSON:<\/p>\n<p><code>$obj = json_decode($maybeJSON);<\/code><\/p>\n<p><code>if (json_last_error() === JSON_ERROR_NONE) {<\/code><br \/>\n<code>\/\/ Esecuzione di operazioni con $obj<\/code><br \/>\n<code>}<\/code><\/p>\n<p>In questo scenario, le risorse venivano impiegate principalmente per stabilire la validit\u00e0 del payload JSON, una pratica poco efficiente in termini di utilizzo della memoria.<\/p>\n<p>Con l&#8217;arrivo di PHP 8.3, \u00e8 possibile eseguire la stessa operazione in modo pi\u00f9 efficiente utilizzando <code>json_validate()<\/code>:<\/p>\n<p><code>if (json_validate($maybeJSON)) {<\/code><br \/>\n<code>\/\/ Esecuzione di operazioni con $maybeJSON<\/code><br \/>\n<code>}<\/code><\/p>\n<p><strong>Importante:<\/strong> \u00c8 bene ricordare che non \u00e8 ottimale utilizzare <code>json_validate()<\/code> e successivamente passare i dati attraverso <code>json_decode()<\/code>, in quanto ci\u00f2 impiegherebbe comunque le risorse di memoria per la decodifica. L&#8217;approccio ideale \u00e8 utilizzare <code>json_validate()<\/code> per confermare la validit\u00e0 del JSON prima di procedere con ulteriori operazioni, come il salvataggio del dato o la sua trasmissione come risposta a una richiesta. In questo modo, si ottimizza l&#8217;uso delle risorse e si garantisce un trattamento pi\u00f9 efficiente dei dati JSON.<\/p>\n<p><strong>Deep Cloning di Propriet\u00e0 Readonly in PHP 8.3<\/strong><\/p>\n<p>PHP 8.3 ha introdotto un miglioramento significativo nella gestione delle <strong>propriet\u00e0 readonly<\/strong> nelle classi. Questa funzionalit\u00e0, inizialmente introdotta in PHP 8.1 per singole propriet\u00e0 e poi estesa a intere classi in PHP 8.2, ha ricevuto un ulteriore sviluppo grazie a una recente RFC (Request For Comments).<\/p>\n<p>Il problema affrontato era la rigidit\u00e0 nell&#8217;utilizzo di classi con propriet\u00e0 readonly, che limitava alcune possibilit\u00e0 di programmazione. La RFC ha proposto due soluzioni principali:<\/p>\n<ol>\n<li><strong>Permettere l&#8217;estensione di classi non-readonly da classi readonly.<\/strong><\/li>\n<li><strong>Consentire la reinizializzazione di propriet\u00e0 readonly durante la clonazione.<\/strong><\/li>\n<\/ol>\n<p>La seconda proposta, adottata in PHP 8.3, ha apportato una svolta nella gestione delle <strong>propriet\u00e0 readonly<\/strong>. Questa nuova funzionalit\u00e0 permette che, durante il deep cloning, le istanze di una classe con propriet\u00e0 readonly possano essere reinizializzate all&#8217;interno del <strong>metodo magico <code>__clone<\/code><\/strong>. Ci\u00f2 significa che anche le funzioni invocate da <code>__clone<\/code> possono legalmente modificare queste propriet\u00e0.<\/p>\n<p>Ecco un esempio pratico tratto dalla RFC che illustra il nuovo comportamento:<\/p>\n<\/div>\n<p><code>class Foo {<\/code><br \/>\n<code>public function __construct(<\/code><br \/>\n<code>public readonly DateTime $bar,<\/code><br \/>\n<code>public readonly DateTime $baz<\/code><br \/>\n<code>) {}<\/code><\/p>\n<p><code>public function __clone() {<\/code><br \/>\n<code>\/\/ Durante la clonazione, $bar ricever\u00e0 un nuovo oggetto DateTime<\/code><br \/>\n<code>$this-&gt;bar = clone $this-&gt;bar;<\/code><\/p>\n<p><code>\/\/ Questa funzione verr\u00e0 chiamata<\/code><br \/>\n<code>$this-&gt;cloneBaz();<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>private function cloneBaz() {<\/code><br \/>\n<code>\/\/ Questa operazione \u00e8 lecita quando chiamata all'interno di __clone<\/code><br \/>\n<code>unset($this-&gt;baz); <\/code><br \/>\n<code>}<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>$foo = new Foo(new DateTime(), new DateTime());<\/code><br \/>\n<code>$foo2 = clone $foo;<\/code><\/p>\n<p>Questa novit\u00e0 aumenta significativamente la flessibilit\u00e0 nell&#8217;utilizzo di classi con propriet\u00e0 readonly, permettendo di utilizzare pattern di progettazione pi\u00f9 avanzati e sofisticati, pur mantenendo l&#8217;integrit\u00e0 e la sicurezza che le propriet\u00e0 readonly offrono.<\/p>\n<h2><strong>Introduzione al Nuovo Attributo #[\\Override] in PHP 8.3<\/strong><\/h2>\n<p>PHP 8.3 ha introdotto un&#8217;importante novit\u00e0 che migliora significativamente la chiarezza e la precisione del codice: l&#8217;attributo <strong>#[\\Override]<\/strong>. Questo nuovo attributo \u00e8 fondamentale quando si lavora con l&#8217;ereditariet\u00e0 e le interfacce in PHP, in quanto fornisce una conferma esplicita che un metodo in una classe figlia \u00e8 destinato a sovrascrivere un metodo nella classe genitore o a implementare un metodo definito in un&#8217;interfaccia.<\/p>\n<p><strong>Il Problema Risolto da #[\\Override]:<\/strong> Nella programmazione, pu\u00f2 capitare che un metodo in una classe derivata sia scritto con l&#8217;intento di sovrascrivere un metodo della classe genitore o di implementare un metodo di un&#8217;interfaccia. Tuttavia, errori come refusi nel nome del metodo possono far s\u00ec che il metodo non sovrascriva effettivamente quello previsto, portando a comportamenti imprevisti e difficili da individuare.<\/p>\n<p><strong>Come Funziona #[\\Override]:<\/strong> L&#8217;attributo #[\\Override] serve a garantire che il metodo in una classe derivata sia effettivamente una sovrascrittura di un metodo della classe genitore o un&#8217;implementazione di un metodo di un&#8217;interfaccia. Se un metodo contrassegnato con #[\\Override] non corrisponde a un metodo nella classe genitore o nell&#8217;interfaccia, PHP generer\u00e0 un errore, rendendo immediatamente evidente il problema.<\/p>\n<p><strong>Esempio Pratico:<\/strong><\/p>\n<p><code>class A {<\/code><br \/>\n<code>protected function ovrTest(): void {}<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>class B extends A {<\/code><br \/>\n<code>#[\\Override]<\/code><br \/>\n<code>public function ovrTest(): void {} \/\/ Corretto: sovrascrive ovrTest() di A<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>class C extends A {<\/code><br \/>\n<code>#[\\Override]<\/code><br \/>\n<code>public function ovrBest(): void {} \/\/ Errore: ovrBest() non esiste in A<\/code><br \/>\n<code>}<\/code><\/p>\n<h2><strong>Recupero Dinamico di Costanti di Classe e Membri di Enum<\/strong><\/h2>\n<p>PHP 8.3 ha semplificato anche il recupero dinamico di costanti di classe e membri di enum. In precedenza, per ottenere il valore di una costante di classe o di un membro di enum usando una variabile per il nome, si doveva usare la funzione <code>constant()<\/code>. Questo metodo era meno diretto e poteva risultare pi\u00f9 complesso in alcuni scenari.<\/p>\n<p>Ora, con PHP 8.3, \u00e8 possibile accedere direttamente a queste costanti e membri usando una sintassi pi\u00f9 semplice e diretta:<\/p>\n<p><code>class MyClass {<\/code><br \/>\n<code>public const THE_CONST = 9;<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>enum MyEnum: int {<\/code><br \/>\n<code>case FirstMember = 9;<\/code><br \/>\n<code>case SecondMember = 9;<\/code><br \/>\n<code>}<\/code><\/p>\n<p><code>$constantName = 'THE_CONST';<\/code><br \/>\n<code>$memberName = 'FirstMember';<\/code><\/p>\n<p><code>echo MyClass::{$constantName}; \/\/ Accesso diretto alla costante di classe<\/code><br \/>\n<code>echo MyEnum::{$memberName}-&gt;value; \/\/ Accesso diretto al membro di enum<\/code><\/p>\n<p>Queste innovazioni in PHP 8.3, sia l&#8217;attributo <strong>#[\\Override]<\/strong> sia il miglioramento nel recupero dinamico delle costanti, rappresentano passi importanti verso un codice pi\u00f9 chiaro, sicuro e mantenibile.<\/p>\n<p>PHP 8.3 ha introdotto un metodo innovativo e utile per la generazione di stringhe casuali: <code>getBytesFromString()<\/code>. Questo metodo, aggiunto all&#8217;estensione Random di PHP, semplifica notevolmente la creazione di stringhe randomizzate da un set di caratteri predefiniti.<\/p>\n<p><strong>Come Funziona getBytesFromString():<\/strong> La funzionalit\u00e0 \u00e8 piuttosto diretta. Fornite una stringa di caratteri da cui attingere e specificate la lunghezza desiderata per la stringa casuale. Il metodo <code>getBytesFromString()<\/code> si occuper\u00e0 poi di selezionare casualmente i byte dalla vostra stringa di partenza, fino a raggiungere la lunghezza specificata.<\/p>\n<h3><strong>Esempi Pratici:<\/strong><\/h3>\n<p><code>$rando = new Random\\Randomizer();<\/code><br \/>\n<code>$alpha = 'ABCDEFGHJKMNPQRSTVWXYZ';<\/code><\/p>\n<p><code>\/\/ Genera una stringa casuale di 6 caratteri da $alpha<\/code><br \/>\n<code>echo $rando-&gt;getBytesFromString($alpha, 6); \/\/ Es: \"MBXGWL\"<\/code><\/p>\n<p>Un aspetto interessante di <code>getBytesFromString()<\/code> \u00e8 che permette di generare stringhe casuali pi\u00f9 lunghe della stringa di input. Ad esempio:<\/p>\n<p><code>$rando = new Random\\Randomizer();<\/code><br \/>\n<code>$nums = '123456';<\/code><\/p>\n<p><code>\/\/ Genera una stringa casuale di 10 cifre da $nums<\/code><br \/>\n<code>echo $rando-&gt;getBytesFromString($nums, 10); \/\/ Es: \"2526341615\"<\/code>.<\/p>\n<p><strong>Ponderazione dei Caratteri nell&#8217;Input:<\/strong> Un&#8217;altra caratteristica distintiva di questo metodo \u00e8 la possibilit\u00e0 di &#8220;pesare&#8221; i caratteri nell&#8217;input. Se alcuni caratteri compaiono pi\u00f9 frequentemente nella stringa di input, avranno maggiori probabilit\u00e0 di essere selezionati nella stringa casuale. Per esempio:<\/p>\n<p><code>$rando = new Random\\Randomizer();<\/code><br \/>\n<code>$weighted = 'AAAAA12345';<\/code><\/p>\n<p><code>\/\/ Genera una stringa casuale dove 'A' ha maggiori probabilit\u00e0 di apparire<\/code><br \/>\n<code>echo $rando-&gt;getBytesFromString($weighted, 5); \/\/ Es: \"1AA53\"<\/code><\/p>\n<p>In conclusione, il metodo <code>getBytesFromString()<\/code> in PHP 8.3 offre una soluzione semplice ed efficace per la generazione di stringhe casuali, con la flessibilit\u00e0 di personalizzare la distribuzione dei caratteri e la lunghezza della stringa risultante. Questo lo rende uno strumento prezioso per una variet\u00e0 di applicazioni, dall&#8217;elaborazione di dati alla sicurezza informatica.<\/p>\n<h3><strong>Altri Cambiamenti e Miglioramenti in PHP 8.3<\/strong><\/h3>\n<p>Oltre alle importanti novit\u00e0 gi\u00e0 discusse, PHP 8.3 introduce una serie di <strong>miglioramenti e funzionalit\u00e0 aggiuntive<\/strong> che arricchiscono ulteriormente il linguaggio. Di seguito, evidenziamo alcuni di questi aggiornamenti minori, che nonostante la loro scala ridotta, possono avere un impatto significativo nello sviluppo quotidiano.<\/p>\n<ol>\n<li><strong>Nuovi Metodi per la Classe DOMElement:<\/strong> PHP 8.3 arricchisce la gestione del DOM con metodi aggiuntivi come <code>DOMElement::getAttributeNames()<\/code>, <code>DOMElement::insertAdjacentElement()<\/code>, <code>DOMElement::insertAdjacentText()<\/code>, e altri, migliorando la manipolazione dei nodi DOM.<\/li>\n<li><strong>Aggiornamenti per IntlCalendar:<\/strong> La classe <code>IntlCalendar<\/code> \u00e8 stata estesa con metodi come <code>IntlCalendar::setDate()<\/code> e <code>IntlCalendar::setDateTime()<\/code>, offrendo maggior flessibilit\u00e0 nella gestione delle date.<\/li>\n<li><strong>Funzioni LDAP Aggiornate:<\/strong> Le nuove funzioni <code>ldap_connect_wallet()<\/code> e <code>ldap_exop_sync()<\/code> ampliano le capacit\u00e0 di integrazione LDAP.<\/li>\n<li><strong>Miglioramenti nelle Funzioni Multibyte:<\/strong> La nuova funzione <code>mb_str_pad()<\/code> aggiunge ulteriori opzioni per la manipolazione di stringhe multibyte.<\/li>\n<li><strong>Nuove Funzioni POSIX:<\/strong> Funzioni come <code>posix_sysconf()<\/code> e <code>posix_eaccess()<\/code> sono state introdotte per migliorare l&#8217;interazione con il sistema operativo.<\/li>\n<li><strong>Nuovo Metodo in ReflectionMethod:<\/strong> Il metodo <code>ReflectionMethod::createFromMethodName()<\/code> offre maggiore flessibilit\u00e0 nella riflessione dei metodi.<\/li>\n<li><strong>Funzioni Socket Aggiornate:<\/strong> La funzione <code>socket_atmark()<\/code> amplia le funzionalit\u00e0 di networking.<\/li>\n<li><strong>Nuove Funzioni per le Stringhe:<\/strong> <code>str_increment()<\/code>, <code>str_decrement()<\/code>, e <code>estream_context_set_options()<\/code> sono alcune delle nuove funzioni introdotte per la manipolazione delle stringhe.<\/li>\n<li><strong>Nuovo Metodo in ZipArchive:<\/strong> <code>ZipArchive::getArchiveFlag()<\/code> aggiunge nuove possibilit\u00e0 di gestione degli archivi ZIP.<\/li>\n<li><strong>Nuova Impostazione INI:<\/strong> La <code>zend.max_allowed_stack_size<\/code> permette di configurare la dimensione massima dello stack, migliorando la gestione delle risorse.<\/li>\n<\/ol>\n<h3><strong>Deprecazioni in PHP 8.3<\/strong><\/h3>\n<p>Ogni nuova versione di PHP porta con s\u00e9 anche un elenco di funzioni e impostazioni che vengono deprecate. Queste deprecazioni sono importanti da notare, in quanto l&#8217;uso continuato di tali funzioni pu\u00f2 portare a warning nei log e potenziali problemi di compatibilit\u00e0.<\/p>\n<p>Tra le deprecazioni in PHP 8.3 troviamo:<\/p>\n<ul>\n<li>La correzione della costante <code>U_MULTIPLE_DECIMAL_SEPERATORS<\/code> in <code>U_MULTIPLE_DECIMAL_SEPARATORS<\/code>.<\/li>\n<li>La deprecazione della variante <code>3MT_RAND_PHP Mt19937<\/code>.<\/li>\n<li>Cambiamenti nella <code>ReflectionClass::getStaticProperties()<\/code>.<\/li>\n<li>Diverse impostazioni INI come <code>assert.active<\/code>, <code>assert.bail<\/code>, ecc., sono state deprecate.<\/li>\n<li>Le chiamate senza argomenti a <code>get_class()<\/code> e <code>get_parent_class()<\/code> sono ora deprecate.<\/li>\n<\/ul>\n<h2><strong>PHP 8.3 Disponibile su G Tech Group<\/strong><\/h2>\n<p>In conclusione, PHP 8.3 rappresenta un significativo passo avanti nello sviluppo del linguaggio, introducendo una serie di nuove funzionalit\u00e0, miglioramenti e deprecazioni che sono cruciali per modernizzare e ottimizzare il codice PHP. Con l&#8217;aggiunta di metodi pi\u00f9 avanzati, una maggiore flessibilit\u00e0 e l&#8217;introduzione di nuove funzioni, PHP 8.3 si posiziona come una scelta eccellente per gli sviluppatori che cercano di migliorare le prestazioni e la sicurezza delle loro applicazioni.<\/p>\n<p>Per coloro che utilizzano i servizi di hosting e server, abbiamo una buona notizia: <strong>G Tech Group<\/strong> ha gi\u00e0 implementato PHP 8.3 su tutti i suoi sistemi di hosting e server. Questo significa che, come cliente di G Tech Group, potete godere immediatamente di tutti i benefici offerti dalla pi\u00f9 recente versione di PHP, senza la necessit\u00e0 di aggiornamenti manuali o configurazioni complesse.<\/p>\n<p>Questa implementazione \u00e8 parte dell&#8217;impegno di G Tech Group nel fornire le tecnologie pi\u00f9 avanzate e aggiornate ai suoi clienti, assicurando che i vostri progetti siano sempre supportati dalle migliori e pi\u00f9 recenti soluzioni disponibili sul mercato. Con PHP 8.3 su G Tech Group, potete aspettarvi un ambiente di hosting robusto, sicuro e performante, ideale per sviluppare e far crescere le vostre applicazioni web.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>PHP 8.3, rilasciato il 23 novembre, ha introdotto notevoli novit\u00e0 e miglioramenti rispetto alla sua versione precedente, PHP 8.2. Questa versione, pur essendo considerata &#8220;minore&#8221;,&hellip;<\/p>\n","protected":false},"author":2,"featured_media":66521,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[432],"tags":[479,811,911],"class_list":["post-66510","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-novita","tag-g-tech-group","tag-hosting","tag-sicurezza"],"_links":{"self":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/66510","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=66510"}],"version-history":[{"count":0,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/66510\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/66521"}],"wp:attachment":[{"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=66510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=66510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nuovosito.gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=66510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}