 Inanzitutto vi ringrazio per l'opportunità che mi raddate questa sera di condividere informazioni che ritengo essere importanti per il mondo PHP in generale e quindi questa sera vedremo le novità di PHP 8 e condivideremo un po' di aspetti tecnici ma cercheremo di non addentrarci troppo dal punto di vista tecnico di rimanere più ad alto livello. Io sono Elena Brambilla, sono Regional Channel Manager per Zend Technologies, ormai per Forse Software, siamo infatti stati acquisiti tre anni fa ormai, se io ho messo già tre anni, dalla Per Forse Software che è un'azienda di Minneapolis specializzata nella gestione del DevOps in generale, quindi siamo entrati a far parte di un gruppo più grande e più forte e soprattutto per quanto riguarda tutto ciò che è il mondo open source e il supporto al mondo open source ma la nostra anima comunitaria rimarrà sempre finché veterani come me sono all'interno dell'azienda. Io sono certificata, sono un PHP Certified Engineer, quindi arrivo da un'esperienza tecnica, sono tanti anni che lavoro per questa azienda e ho iniziato infatti nel 2006, come consulente nel 2008 poi sono passata a essere una dipendente di questa azienda e abbiamo aperto nel 2008 la figliata italiana e quindi questa è una veterana se si può dire. Nel 2008 ho iniziato a lavorare nei professional services seguendo tutti gli aspetti legati al project management e alla formazione. La formazione è stata per me un qualcosa di importante che mi ha sempre appassionata perché mi è sempre piaciuta l'idea di riuscire a trasmettere nozioni a terze parti quindi spero di poterlo fare anche questa sera. Nella mia evoluzione, perché sono tanti anni effettivamente che sono in azienda e quando l'età avanza devi anche a cambiare un po' ruolo Dal 2015 sono passata dopo una fase di gestione delle attività di pre-vendita a livello tecnico di post-vendita a gestire più aspetti burocratici dell'attività quindi mi occupo della customer satisfaction, del mantenimento del business a livello europeo e di diffondere la conoscenza di zend, la cosiddetta PHP company a livello europeo. Però basta parlare di me, parliamo invece di questo PHP 8 e sappiate che le informazioni che sto per condividere con voi arrivano da mettheware of finay che è il nostro product manager e nonché è responsabile del progetto zend framework, framework zend che adesso è passato sotto la Linux Foundation e che ha cambiato il nome diventato Laminas. Metthew è uno dei punti di riferimento al nostro interno in termini di innovazione, di conoscenza e quant'altro. Le slide che sto per mostrarvi sono parte integrante di un webinar che metthew ha consegnato a condiviso qualche tempo fa, qualche settimana fa e che troverete anche pubblicato sul nostro sito e poi alla fine di queste slide troverete dei link utili che vi invito poi ad approfondire perché ci sono tante altre cose che vengono dette in aggiunta che io non arriverò a dire per questione di tempo e quindi vi invito appunto ad approfondire tramite queste registrazioni, sono dei webinar registrati senza impegno, senza nessun tipo di vincolo. Vediamo ora di che cosa andremo a parlare. Considerate che gli aspetti tecnici sono notevoli, non voglio approfondire troppo dal punto di vista tecnico ma rimarrò ad alto livello cercando di darvi delle indicazioni più chiaro possibile, ma di alto livello su quelle che sono le sintassi, le nuove funzionalità di sintassi, le nuove regole di sintassi appunto, le nuove funzionalità. Vedremo anche quali sono i cambiamenti, le nuove funzionalità a livello di motore del PHP. Faremo poi delle considerazioni finali e daremo spazio eventualmente a domande o perplessità e a qualsiasi tipo di conversazione che vogliate avere. Considerate anche di fermarmi magari se volete durante la presentazione mi farebbe molto piacere riuscire a creare una conversazione diciamo da entrambe le parti che non sia mono direzionale. Posso anche usare la chat del di Zoom quindi per fare domande che io appunto magari le leggo quindi se non avete, se siete più timidi potete anche scrivere sulla chat. Va benissimo, io la chat in questo momento non la vedo. Non lego io, non lego io cosa vuoi. Ah, perfetto, eventualmente mi interrompisco, perfetto, ok. E così magari riusciamo anche a vedere aspetti che possono essere più interessante anche per voi. Quindi partiamo subito, non portiamovi altro tempo e vediamo di capire quali sono queste nuovi sintasti di questo bel linguaggio PHP 8. Ok, adunque in questa presentazione parleremo dell'union dei tipi, la union type, parleremo anche di questo nuovo tipo mixed che può essere interessante e sollevare anche eventualmente delle obiezioni, parleremo anche della nuova modalità di definire le proprietà all'interno del metodo costruttore di una classe. Poi approfondiamo, diremo anche qualche cosa, il merito alla pseudo costante punto punto classe e come è cambiata l'approccio nei confronti di questa costante. Parleremo dei nemed argomensa, degli attributi, del match delle espressioni, dell'operatore, scusatemi nullsafe, di come la catch è modificata nella gestione semplicemente del tipo, della variabile che viene passata e come generare eczioni da espressioni. Quindi questi sono tanti argomenti che affronteremo soltanto parlando della sintasi della nuova versione del PHP. Nelle versioni precedenti a PHP 8 era possibile dichiarare un solo tipo per proprietà, parametri e valori restituiti da funzioni e da metodi. Nella versione 7.1 del linguaggio nelle versioni più recenti sono stati aggiunti dei tipi nullable, il che significa che quindi possiamo anche dichiarare che la tipologia di un dato è nulla con una facile dichiarazione del tipo simile a dollaro string per esempio. Comunque, dalla versione PHP 8.0 possiamo adesso dichiarare più di una tipologia per variabile e proprietà di classe. Questo cosa significa? Significa che per un determinato parametro, per un determinato argomento, posso indicare attraverso l'operatore verticale, la barra verticale assegnata appunto al valore più tipologie. Quindi per esempio, se volessi dire che una variabile è di tipo float e int sarebbe sufficiente dichiarare all'interno di una classe, qualcosa del tipo private int barra verticale float, dollaro un nome della mia proprietà. E questo modo posso fare una assegnazione multipla della tipologia di dato. Se si desidera anche consentire ai filtri di implementare un'interfaccia specifica o una chiamata generica, una callable, è possibile utilizzare anche la filter interface barra verticale callable. Questa è un'altra opportunità. La mixed pseudo type, che cos'è? Dunque, facciamo un altro preambolo. Noi vogliamo dare a PHP la possibilità sempre di fare tutto. In questo caso, stiamo gestendo un tipo mixed che include tutti i tipi scalari in PHP, null e tutti gli oggetti compresi, gli oggetti di classe, le chiamabili perfino a livello di risorsa. Quindi io in un tipo mixed, quando dichiaro una proprietà, una variabile di tipo mixed, significa che questa può contenere qualsiasi cosa, compresa anche la possibilità ed implementa di essere una risorsa. Con il costruttore, allora questa è una cosa interessante, questa è una introduzione perché nella PHP 7.4 questa versione di linguaggio alla 7.4 ci ha dato la possibilità di aggiungere tipologie alle nostre proprietà di classe. Inovazione ha causato molte patate bollenti in qualche modo, come si può dire. Con PHP 8 le cose cambiano un pochino, possiamo combinare le nostre dichiarazioni proprietà e i nostri metodi e dei nostri costruttori più facilmente. Quindi questo cosa vuol dire. Dall'esempio che vedete qui nella slide io ho una modalità vecchio stile, intanto tutti sanno che l'undascore-undascore-construct è quel metodo magico che viene invocato in modo silente al momento in cui faccio l'istanza di una classe. Bene, nel momento in cui faccio l'istanza di una classe e passo eventualmente un valore, un parametro all'istanza della classe, in questo caso il valore, perdona, la variabile dollaraName verrà caricata nella proprietà privata disName. La nuova struttura mi consente di fare la stessa cosa, ma riducendo drasticamente il numero di operazioni che devo andare a fare, quindi del codice che vado a scrivere. E questa è una delle innovazioni che porta il PHP 8, cioè l'ottimizzazione del codice scritto, quindi una riduzione, perché diventiamo sempre più pigri e quindi vogliamo sempre scrivere meno. In questo caso vedete che nella fase di passaggio, di definizione dei parametri che entrano in ingresso a mio metodo costruttore, vado a dichiarare che questa sarà una proprietà di tipo privato, stringa e si chiamerà dollaraName ed è dito di fare questo passaggio in più. Cosa succede nel momento in cui io voglio utilizzare entrambe le modalità? La vecchia modalità continua a essere supportata, non ci sono incompatibilità di nessun tipo. Sappiate però che se vado a mixare le due metodologie, il comportamento che verrà eseguito dal linguaggio è un comportamento che vede eseguire prima di tutto l'assegnazione di ciò che viene definito a livello di passaggio di parametro. Quindi prima di eseguire il codice contenuto nelle due parentesi graffe della metodo costruttore, verrà assegnato il valore della valeabile dollaraName in questo caso all'interno della proprietà privata dollaraName. Dopo verrà eseguito tutto il resto. Questo è importante da sottolineare perché per evitare fondamentalmente di avere a che fare poi con dei problemi comportamentali del codice inaspettati. I tipi richiamabili non sono consentiti, cioè la callable non è consentita come parametro richiamabile da questo tipo di sintasi, quindi se ho delle callable devo procedere vecchio stile. Ho l'ubiquità della costante punto punto class. Questa costante è stata introdotta già nella versione 5.4 del linguaggio e fondamentalmente viene utilizzata per risolvere il nome della classe nel suo nome di classe completo. L'innovazione che porta il PHP 8 è che da questa versione in avanti la funzionalità viene stesa anche alle stanze di classe. Quindi in questo caso vedete nell'esempio quello che verrà restituito sarà il nome completo del mem space, della classe che è stata utilizzata. Come direte io vado abbastanza veloce su ogni singola innovazione perché poi a parte il fatto che questo materiale verrà distribuito e condiviso quindi potrete eventualmente soffermarvi maggiormente su ogni singola esempio. Vuole essere soltanto uno spunto di riflessione un po' di approfondire. Per quanto riguarda i Nemed arguments, chissà quante volte vi è capitato di definire un numero molto lungo di un elenco di argomenti molto lungo all'interno di una funzione di un metodo e così via definendo poi alcuni valori con un dato di default. Il problema maggiore in questo tipo di approccio è che quando vado poi a richiamare il metodo utilizzare il metodo che ha al suo interno questo tipo di dichiarazione devo fare attenzione a come vado a passare i parametri perché il valore posizionale dei parametri che vado a passare al mio metodo, la mia funzione è importante. L'innovazione che porta il PHP 8 è che non ha più importanza la posizione del parametro ma assume importanza il nome quindi passerò i parametri in questa modalità che vedete nuova dimenticandomi quindi non ignorando completamente come da posizione di stessi sia indicata all'interno della definizione. I attributes. Qui dobbiamo aprire una piccola parentesi. Con PHP 8 siamo in grado di utilizzare appunto gli attributi. L'obiettivo di questi attributi, noti anche come anotazioni, molti altri linguaggi è quello di aggiungere dei metadati a classi, metodi e variabili in modo più strutturato. Il concetto di attributo comunque non è nuovo perché sono anni che lo utilizziamo attraverso il doc block che permette soltanto una simulazione di questo comportamento. Con invece con l'aggiunta degli attributi, degli attributi abbiamo avesso adesso un comportamento riconosciuto ufficialmente nel linguaggio per rappresentare appunto questo tipo di metadati e quindi evitiamo di dover analizzare manualmente i doc block quindi abbiamo fatto un notevole passo avanti in questa direzione. Come vengono dichiarati gli attributi vengono dichiarati attraverso la doppia chiocciola e quindi facendo la doppia chiocciola un po' come si faceva nel doc block direttamente all'interno del mio codice ho la possibilità di definire appunto questo tipo di comportamento. Il match delle espressioni, dunque, lo switch case è un operatore che è presente nel linguaggio fin dalle primissime versioni. Questo switch case ha alcune carenze che sono state risolte con la espressione match. Una delle carenze è che per esempio l'abbinamento della impostazione è predefinita a volte può essere molto flable. La corrispondenza rigorosa quindi quella che viene effettuata attraverso un controllo con il triplo uguale e non soltanto con il doppio uguale ricordo che la corrispondenza rigorosa significa che oltre al valore della variabile vado a controllare anche la tipologia quindi devono coincidere entrambe tipologia e valore. In questo caso da loro metode verifico che sia una stringa e che abbia il contenuto post potrebbe essere anche gestito diversamente. Quindi è necessario fare questo tipo di controllo rigoroso per essere certi che i valori che vado a verificare nei miei vari case siano esattamente quello che sto cercando. Un'altra carenza è che per interrompere in modo esplicito per uscire dalla stuttura switch case devo usare un break o un return e quindi questo può crearmi dei problemi posso sempre affrontare casistiche di codice che alla fine non collimano con il mio desiderio finale. Se infine se si assegna un valore all'interno delle stuze di case e in nessun caso corrisponde potenzialmente questo valore potrebbe anche non essere inizializzato quindi potrei avere problemi nel codice successivo. Quindi fondamentalmente in questa modalità switch case gestita vecchia maniera non ho la possibilità di avere effettivamente tutto sotto controllo è demandato diciamo al controllo manuale la completa casistica. Con il match expression la corrispondenza non richiede più prima di tutto una dichiarazione di interruzione e può combinare diverse casistiche in una sola usando una virgola e ristituendo un valore. Vedete che il match funziona proprio vedete questa modalità di scrittura molto più pulita e anche in questo modo potrei assegnare o meglio sintetizzare il mio case due valori contemporaneamente quindi posso controllare che sia lower e lower case semplicemente separando le due stringe da una virgola. Questo mi permette di eliminare quella esigenza di dover controllare che l'uscita per un break in opportuno sia effettivamente avvenuta quindi ho più controllo rispetto a quello che era prima. Un attimo che ha un problema di mouse ma un'annaggia mi scappa sempre. La match expression quindi mi consente di comunque di inserire un elemento di default esattamente come succedeva in precedenza la no in la novità della switch del match rispetto allo switch case è che se non definisco un case di default diciamo un dato di default e non c'è un match viene generato un errore di tipo un handle match error e questo mi permette eventualmente di catturarlo in una in una catch che ho costruito appositamente. Inoltre la match permette una sintasi ancora una volta più semplificata come in questo caso e mi permette un controllo puntuale del valore che viene passato quindi ancora una volta vado a ridurre il codice scritto e mi permette di avere un controllo molto più perfezionato rispetto a quello che dovevo ricordarmi personalmente di fare in precedenza. Il nullsafe operator dunque l'operatore nullsafe è una nuova sintasi del PHP 8 che fornisce sostanzialmente la funzionalità di concatenamento facoltativo al PHP cosa vuol dire ma vuol dire che con la modalità di scrittura attraverso l'operatore nullsafe che si identifica con il punto di domanda attrattino maggiore ho la possibilità di controllare se il dato che mi viene restituito è di tipo null lo posso fare quindi molto attraverso questa scorciotoia molto semplicemente con questa sintasi minimizzata mentre prima vevo controllare che fosse null adesso è sufficiente usare questo tipo di operatore. La catch by type only allora il PHP 5 ha introdotto la cattura delle eccezioni la try catch ci consente sostanzialmente di tentare di eseguire una parte di codice che reputiamo particolarmente critica e che potrebbe generare delle eccezioni. La catch cattura l'eccezione nel momento in cui questa viene scattenata all'interno della try e a seconda questo è il comportamento che viene utilizzato oggi a seconda della tipologia di oggetto che viene inserito all'interno della dollar e in questo caso della variabile che viene passata all'operatore catch viene eseguito un codice piuttosto che un altro io sostanzialmente potrei avere in cascata n catch che accettano tipologie di oggetti differenti a seconda della tipologia di oggetto che viene caricato nella dollar e verrà eseguita una catch piuttosto che un'altra questo esempio è molto più semplificato rispetto a quello che potrebbe essere la realtà. La novità introdotta dal PHP 8 è che non è più necessario generare una variabile cioè non è più necessario generare un oggetto ma semplicemente sarà sufficiente passare direttamente a distanza dell'oggetto di errore che vorremmo gestire nella generazione dell'errore quindi quando vado a triggare a scatenare l'errore non dovrò più caricare una nuova variabile e quindi vado a ottimizzare anche qui le risorse non sarà più necessario né catch a indicare la variabile che è in ingresso perché non esistrà più e semplicemente passerò la tipologia di oggetto che mi aspetto che arrivi. La flowing exception from expression dunque anche qui la capacità di lanciare eccezioni da espressioni e con la PHP 7.4 è stato introdotto l'operatore freccia l'operatore freccia che mi consente di fare determinate azioni che appunto consentono di dichiarare rapidamente una closure con una singola espressione acquisendone faccoltativamente il valore che viene ritornato da questa closure. Allo stesso modo abbiamo quindi operatori ternari e eventualmente anche operatore di cosiddetto coalescenza nullo null coalescing operator nel momento in cui volessimo però controllare se è stata sollevata un'eccezione perché nessuna di questi operatori solleva un'eccezione in modo indipendente diciamo in modo automatico allora devo intervenire manualmente inserendo del codice aggiuntivo che vada a controllare se effettivamente è andato tutto a buon fine e nel caso questa cosa non sia successa quindi abbiamo un valore false negativo ecco che vado a dover gestire manualmente la mia eccezione a scatenare l'eccezione creando un'istanza della mia exception. Con l'introduzione invece con la nuova sintasi o la possibilità vedete come si trasforma la sintasi come si riduce rispetto a prima o la possibilità di innescare l'eccezione direttamente dall'espressione quindi non devo più fare manualmente dei controlli ma banalmente se questa non è una stringa allora scatenò un'eccezione vedete come il nuovo linguaggio ancora una volta tende a ridurre ai minimi termini la sintasi stiamo diventando sempre più pigri. Posso fare una domanda perché è apparsa un intervento che proprio su questa parte c'è chi trova l'essere appunto più concisi e più creare un codice quindi più snello ma lo rende meno leggibile questo è un commento che è venuto della chat e non è una mia quindi mi permettevo di... No no no ma sono perfettamente d'accordo questa nuova sintasi generalmente le sintasi di questo tipo sono poco leggibili meno leggibili e tendono a rendere il linguaggio di per sé più complesso questo è vero è corretto e ne sono consapevole e condivido in pieno questa questa affermazione c'è da dire però che con questa modalità riesco anche a velocizzare la scrittura del codice. Il tentativo che è stato fatto da non soltanto beh a livello di community sì ma diciamo dai vertici della community quindi da chi segue il PHP da un punto di vista più alto cioè da quel punto di vista di crescita del linguaggio rispetto ad altri linguaggi c'è stata la tendenza proprio ad assimilare le tipiche espressioni che arrivano da linguaggi più complessi come possono essere gavate per esempio e a farle diventare proprio quindi sì sono d'accordo non è obbligatorio comunque usare a questo no assolutamente no è una possibilità in più nulla tibietta di mantenere il vecchio stile è chiaro che con questa modalità però hai una ottimizzazione anche della come dire della lettura del codice delle intratratazioni del codice c'è da vedere anche questo è un po' come l'idea di usare il switch case invece degli delle if e il sif e il sif e il sif quindi molto meglio usare di switch case che delle if concatenate come si utilizzava all'inizio perché mi ricordo io ho iniziato a usare pkp dalla versione 3 quando ancora non non si parlava di programmazione d'oggetti ed era quello che mi aveva fatto avvicinare alla programmazione che ho capito che pensate un divergogno un po' a dirlo ma io arrivo dalla programmazione in cobal quindi sono ambiente ibm e quindi per me era linguaggio linguaggio ancora usatissimo e non c'è davvero di cambiare lavoro in qualsiasi momento il passaggio di diciamo l'approccio alla nuova modalità è sicuramente più più difficile infatti nei miei corsi ho seguito tantissime centinaia di persone che arrivano dal mondo ibm e che piano piano iniziato a usare la modalità ad oggetti che alla fine non è così complicata ovviamente non mi aspetterei mai che un utente dmi ai a rieusare questa sintasi specifica perché sarebbe chiedere troppo c'è anche un'altra domanda che si riferiva al quando si parlava del tricache la domanda di gugielmo chiede come si recupera l'oggetto exception all'interno di tricache nella tricache facciamo un passo indietro ce l'abbiamo qua ok nella che c'è nella match espression intendi o nella dove chi doveva chiarirlo gugliermo la domanda è nella chat se poi in un switch case all'interno di una tricache puoi sempre scatenare un appro in qualsiasi momento esattamente come abbiamo visto nell'esempio non voglio far venire mal di mare qui ecco puoi fare sempre una fro new exception e scatenare la tua eccezione nello switch case adesso come adesso se non hai un dichiarato un default non hai nessun tipo di errore cioè esci dal tuo case switch case senza avere un'informazione di di nessun tipo nel senso non puoi sapere a meno che tu non faccia dei controlli manuali se la tua logica è entrata all'interno di un case piuttosto che di un altro o all'interno di nessuno devi metterti tu degli alert la novità introdotta invece dalla del match è che se non c'è definito un default all'interno della struttura ecco che allora viene scatenato un'eccezione nel momento in cui non dovesse esserci un match non so se ho risposto la domanda ma se si sembra di sì sembra che gugliermo sia soddisfatto bene mi fa piacere vediamo le nuove funzionalità le nuove funzioni più che funzionalità in questo caso di elenco quelle che sono le nuove funzioni delle spiego una per una non ho una slide per ognuna perché saremmo andati troppo oltre se volete approfondire però vi ricordo lo webinar allora la str underscore contains per esempio è una funzione di gestione delle string voi sapete benissimo lo sapete meglio di me che il linguaggio php è molto potente in termini di gestione delle delle string tante volte c'è capitato di avere bisogno di capire se all'interno di una stringa è presente una sotto stringa ed ecco che andiamo ad utilizzare funzioni come non so la str pos per esempio la str str e altre che adesso non mi dico nemmeno il problema di queste funzioni come la str posso la str str è che non restituiscono un valore buleano certo cioè cosa vuol dire vi faccio un esempio la str posso mi dice qual è la posizione della mia stringa che sto cercando all'interno della sotto stringa se no scusate mi contrario mi dice qual è la posizione della mia sotto stringa all'interno della stringa principale se per esempio io ho una stringa che contiene mio nome Elena Brambilla e sto cercando dove si trova la sotto stringa Elena all'interno della principale stringa Elena Brambilla ecco che l'est al reposmi dice che è in posizione zero quindi perché trova il mio nome nella prima posizione della stringa che sto analizzando perché sappiamo che in PHP come numerazione tendenzialmente inizia sempre da zero la restituzione quindi dell'est al repos sarà zero se non costruisco la mia il mio controllo nel modo corretto rischio di confondere lo zero con un ritorno falso perché lo zero corrisponde al false tendenzialmente e quindi ecco che se non faccio un controllo perfezionato con il triplo uguale non capisco se non ho un informazione certa ecco perché la str contensa è stata creata proprio perché la str contensa semplicemente accetta una stringa principale come primo parametro e come secondo parametro la sotto stringa che sto andando a cercare mi istituisce un valore buleano che è true o false a seconda che questa venga trovata oppure no quindi è una una scorciatoia aggiuntiva quindi mi evita di dove scrivere il codice di controllo in modo corretto che sa quante volte c'è capitato di scrivere il modo scorretto a me tante volte poi abbiamo l'est a restarts with la est e già dai nomi possiamo intuire che cosa fanno queste due nuove funzioni se ho l'esigenza di capire se una stringa inizia o finisce warning con determinate sequenze di caratteri ecco che posso usare una di queste due funzioni ed avere situito un valore buleano quindi posso capire velocemente se la stringa in in all'inizio o alla fine se senza queste due funzioni avrei dovuto fare dei barbatucchi quindi fare usare l'estere post l'estere cos'è l'altro mio dio mi spugge l'estere insomma un'altra funzione di ricerca estere per andare poi a capire esattamente dove si trovano soprattutto se devo cercare alla fine della della stringa quindi devo capire la lunghezza ecco l'estere l'ing capire la lunghezza e poi agire in modo abbastanza contorto in questo modo invece vado dritta all'obiettivo la preg last error message è una funzione che è stata generata proprio allo scopo di alleviare in qualche modo la necessità di trovare soluzioni personalizzate per capire le varie tipologie di errore per esempio gli sviluppatori del codice piac più del linguaggio piac più intendo proprio del corpi hp hanno aggiunto nell'ultima versione la jason last error message per capire quale fosse effettivamente l'errore generato dai struzioni per la conversione la preg last error message invece mi aiuta a capire quale è l'errore generato da tutte quelle funzioni pcr che non generano eccezioni di per sé quindi mi è utile quando uso la preg match chi di voi adora le espressioni regolari io le odio personalmente però sono molto utili e a volte ci risolvano problemi anche molto complessi però la preg match non mi dà un errore chiaro ecco che la preg last error message è in grado di recuperare quale sia l'ultimo errore e quindi posso capire nello quello che sta succedendo infine abbiamo la get debug type che è una tentativa di migliorare la funzione che mi restituisce valori incoerenti se si tratta di oggetti fondamentalmente non è in grado di restituire correttamente i nomi delle classi degli oggetti quindi la get debug type mi aggiunge informazioni a quella che era la get type e quindi ho la possibilità di capire il nome della classe e altre informazioni aggiuntive viene anche passata eventualmente mi dice per esempio se dovessi gestire una closure una una closure appunto mi viene detto che è stato passato un tipo di oggetto anonimo è in grado di darmi informazioni in più questo è molto utile nel momento in cui devo dare informazioni a qualche file di log o comunque locare informazioni che devono essere più descrittive possibile ok ci sono un paio di domande che che appunto ha fatto andrea e gugliermo andrea chiede sono accettate anche le espressioni regolari in string contains oppure string starts with e string str ans with invece di avere una stringa come sottostringa da cercare passare una espressione regolare guarda è una bella domanda non voglio dirti una sciocchezza quindi mi limito a dirti non lo so questa è l'informazione che che non non ti so dare approfondirò e verificherò tendenzialmente ti direi di sì per logica perché è sempre possibile ragionare per diciamo in modo da in modo inclusivo ecco quindi se io passo una espressione regolare a una istruzione di stringa questa viene prima eseguita e poi viene eseguita l'altra istruzione il problema è che sollevabile potrebbe essere quello di catturare l'eccezione nel momento in cui le poste uno deve evitare poi di andare a sbagliare in cascata quindi non so fino a che punto possa essere effettivamente applicabile in modo corretto e poi gugliermo scrive una cosa che non so se è una domanda la mia domanda un suggerimento quando non veniva in mente la funzione quindi gugliermo suggerisce spece str underscore bravo perfetto proprio quella la sub scream era sul pezzo bravo a piacere grazie gugliermo ok vediamo a livello se non ci sono altre altre cose particolari di capire ci sono sì ok no forse non so se abbiamo tempo comunque dario aggiunge che dalla documentazione str underscore content se vuole una stringa non una reguex perfetto e colore in rispetto alla discorso della migliore gestione degli errori perché se viene generato un'eccezione poi rischi di causare in cascata delle problemi che poi diventa difficile gestione comunque le reguex le odiamo un po tutti ma giungo sono utilissime però veramente sono quasi un guage incompressibile ogni volta che ne vevo spiegando il funzionamento dove mettermini e concentrarmi perché gugliermo le amato attenzione io le amo quindi se abbiamo bisogno mi fa paura no appunto andiamo tutti da cui se dobbiamo le prossime volte andiamo tutti da gugliermo facidare una mano anche d'andrea piacciono molto vuol dire che sono sono ok cervelloni ho capito sono personaggi cervelloni va bene vediamo la le cambiamenti a livello di engine e qui sorvolerò su alcuni aspetti che secondo me vi rascerò poi a profondire e affronteremo maggiormente il famoso gith just in time la compilazione just in time queste sono un po le innovazioni che sono state inserite proprio nel compilatore nel compilatore quindi vedremo la gith li fa tra l'error vabbè su diciamo sulla gestione dell'errori fatali quando si tratta di metodi non compatibili come firma l l s e p enforcements enforcements la classe risorsa la risorsa classe la asserzione e la funzionata di asserzione il fatto che l x m l r e p c adesso fa parte della libreria pecla e vedremo le cambiamenti sulle reflexion o dunque il facciamo una una una una considerazione come sappiamo tutti il linguaggio piaccino non è un linguaggio compilato un linguaggio interpretato quindi questo cosa significa che tipicamente il flusso di lavoro di ogni singola richiesta è costituito da sempre i stessi passaggi che sono quelli che vedete qui fondamentalmente devo identificare qual è il codice sorgente che devo andare a interpretare lo trasformo in qualche modo in una sorta di token questo token viene poi passato per costruire cosiddetto abstract syntax 3 questo ultimo componente viene poi compilato nell opcode in istruzioni per la virtual machine quindi sarebbe da dire per l'azienda virtual machine scusate e poi viene interpretato l opcode e compilato in codice macchina per poi essere infine eseguito ok questi sono mi step standard attualmente che vengono eseguiti con la versione 5.6 è stata inserita la opcash la opcash se abilitata perché non è abilitata di default mi consente di modificare il workflow precedente in questo modo quindi identifico sempre il codice che voglio eseguire mi domando è nella cash se non è nella cash allora ecco che vado a rieseguire i tre passaggi che avevamo visto prima e poi vado a interpretare l opcode quindi compilarlo in codice macchina per poi eseguirlo ovviamente se quella parte di codice era già nella cash recupero dalla cash la parte di opcode compilata quindi destruzioni per la virtual machine e le do impasto all'interprete per far sì che puoi do compilare in codice macchina ok con l avvento del php 74 viene offerta una opcash preloading cosa vuol dire vuol dire che possiamo configurare il php per andare a cercare un file che contiene contiene fondamentalmente un elenco di codice da preconpilare in opcode questo codice quindi farà sempre parte dell'opcash è uno strumento più per ottimizzare per accelerare appunto questa fase di cashing una sorta di pseudopre compilazione fatemi passare il termine allora che cos'è il agit e come si adatta a questa a questo workflow notate una cosa il penultimo passaggio del flusso quello è più importante cioè faccio un passo indietro questo l'interprete viene interpretato l opcode è compilato nel codice macchina in tutte le soluzioni sia con la 5 6 con la cash che con l opcash questa è una parte che rimane fuori quindi sia che il mio dato sia stato casciato nella mia cash appunto nell opcash o o no io comunque devo andare a fare questo tipo di compilazione il gith entra proprio in questa fase quindi con il just in time la compilazione just in time che cosa succede succede che vado a compilare tutti quelli opcod in istruzioni macchina quindi in questo modo rendo disponibile nell opcash in un buffer che viene configurato all'interno della delle medie rettive del file piacapini e con assegnando quindi la memoria che voglio che venga assegnata quant'altro vado a caricare il codice della della virtual machine quindi il codice interpretabile dalla virtual machine è già compilato quindi gli step grazie a questa nuova funzionalità si riducono soltanto alla fine in due parti nell'individuare il codice che voglio andare ad eseguire e nell'eseguirlo già in codice macchina direttamente nella cpu i benefici di questa diciamo nuova funzionalità sono effettivamente quelli tipici di dei linguaggi compilati però facciamo alcune considerazioni tra l'altro quando un codice viene compilato con il git con il git o git su ma git diciamo è meglio quando ci sono codici che vengono richiamati più volte oppure posso definire anche all'interno del mio stesso codice quale parte voglio andare a destinare al git una considerazione importante che dobbiamo fare è che il git è particolarmente utile quando vado a impegnare la mia cpu con dei calcoli abbastanza pesanti il problema quale è che sappiamo essere il piac api un linguaggio limitato non tanto come dice la slida a livello di linguaggio in sé ma proprio come destinazione d'uso vi è più utilizzato per operazioni di input output quindi per accesso data desa per richiesta cat ttp per andare a cercare nella cache e così via di maurizio che chiede quindi non vengono generati i nuovi file compilati come dot net diciamo che viene generata un codice binario che viene parcheggiato comunque nella la macchina ma è scritto fisicamente scusa allora mi mi prometto è una cosa che come sei mi sta a cuore mi prometto di di approfittarne no c'è dot net addirittura ti permette di pubblicare un sito e quindi pre compilare tutte le pagine e lui si crea una cartella bine dove ha tutti dentro i compilati mentre le pagine e te danno poi solo un riferimento quindi non le occupa in ram tra virgolette ma in quanto l'estaticizza proprio quindi ecco diciamo che la compilazione git allora in un server condiviso con pi api dove magari la memoria a disposizione di ogni sito è risicata effettivamente poi appena del vantaggio con warpress però è relativo perché magari la memoria che ha disposizione in singolo sito in charred viene viene poi presa dagli altri no con la garbage collection viene buttata via quindi solo deve sempre di compilare quindi è una cosa comunque in ram non c'è nulla di fisico ecco la domanda è così tieni conto che è in fase di continue evoluzione perché poi lo vedremo nelle slag successive è una sorta di prototipo questo che è stato pensato e ragionato da tanti anni che si sta pensando in qualche modo alla compilazione del codice quindi è un qualche cosa che si sta evolvendo questo poi darà anche la possibilità a lo sviluppo di dei cosiddetti rad e rapid application development tools sarà un qualche cosa che è propedeutico a qualche cos'altro ecco quindi siamo soltanto in una fase iniziale e tieni conto appunto che nello specifico poi effettivamente per l'uso tipico del pi api non viene nemmeno tanto sfruttato bisogna un po sfatare questo mito che è stato creato su su questa su questa nuova funzionalità tanto vero che per esempio c'è un benchmark che è stato fatto su press nostro interno per un'installazione standard e vede un incremento delle delle prestazioni di circa il 3% non so come quantificate il 3% però non lo vedo un miglioramento così eccezionale il gith il fatto è che è stato creato più che altro perché spesso vengono utilizzati dei framework che hanno nella fase di boost trap la fase più pesante che a volte diventa anche il 25% di tutta la richiesta e quindi riuscire a compilare questa parte effettivamente può essere può essere interessante però le considerazioni che hai fatto sono del tutto valide quindi la domanda è perché preoccuparsi tanto allora se non è così utile perché già abbiamo detto che non è così eclatante e qui vengono riportate alcune considerazioni fatte da da questo elemento importante della del team di sviluppo del pi api dannecchita popov che sostanzialmente dice attenzione perché le performance sono decisamente migliori quando si parla di calcoli numerici di un certo livello e le performance sono un pochino migliori quando si parla di applicazioni pi api normale ma questa nuova modalità può essere molto importante per il futuro perché potremmo spostare il parte del codice ci perché voi sapete che il pi api sviluppato fondamentalmente in ci potremmo muovere parte di questo codice ci è direttamente nel pi api per renderlo più più più facile anche da gestire quindi questa è un qualche cosa che per il futuro si vedrà che tipo di evoluzione poi prenderà ok il fattal errora su una incompatibola metodo segnato quindi su metodi incompatibili per insomma per firma diversa prima di pi api 8 se andavamo a distendere un metodo o implementavamo un metodo di interfaccia utilizzando una firma diversa anche per i 3 pi api sollevava solo un warning senza interrompere l'esecuzione del codice la difensa ora è che pi api 8 genera un errore fatale quindi questa è una delle incompatibilità rispetto alle versioni precedenti del del pi api la resus classes molte funzioni pi api restituiscono la tipologia risorsa ma in realtà non esiste un tipo risorsa vero e proprio quello che è stato introdotto nella nuova versione di pi api sono state create alcune tipologie di oggetti risorsa nuovi come ad esempio la core la handle la git image la socket l'address info e qualcos'altro quindi fondamentalmente adesso ci sono queste nuove tipologie di risorsa questa è un'innovazione rispetto a quello che che abbiamo avuto fino ad ora la particolarità la cosa interessante da notare e a cui farà attenzione è che se dovessi passare uno di questi oggetti nuovi generati da da queste classi alla un operatore isandescore resource la risposta potrebbe essere può essere restituzion false quindi dobbiamo andare a modificare se vogliamo mantenere la compatibilità del linguaggio nelle versioni precedenti andando a modificare questi queste parti di codice con l'aggiunta di un controllo specifico che mi dica che sia effettivamente un valore falso e quindi devo gestire quella tipo di di problematica l'asserzione le behavior dunque le asserzioni l'assert è presente fin dal php4 e questo questo tipo di di funzione hanno sempre generato soltanto del warning per far sì che generino delle eccezioni dobbiamo andare ad abilitare nella phpini la direttiva assert punto exception la novità è fondamentalmente che nel php8 è già abilitata di default potete sempre disabilitarlo questi sono un po le novità del motore ecco come come presentazione diciamo che abbiamo detto abbiamo parlato tanto l'abbiamo profondito forse poco però ci sono tante tante spunti di riflessione per il futuro le innovazioni che ha portato php8 fondamentalmente sono una forte miglioramento da punto di vista della sentassi per gestire situazioni difficili diciamo ci sono stati dei buoni miglioramenti nella gestione degli errori ed eccezioni c'è stata una buona espansione della tipologia dei dati in senso generale e gli attributi del linguaggio quindi porteranno come dicevo prima lo sviluppo di rad nuovi di tooling nuovi per la rapida application development e il git sembra interessante però l'impatto è tutto da vedere fondamentalmente quindi teniamolo in osservazione vediamo come si evolve per quanto riguarda wordpress e php8 quello che possiamo dire è che attenzione perché php8 è una major release quindi porta diverse innovazioni e cambiamenti di comportamento rispetto al passato banalmente tutto quello che era stato dichiarato deprecato nella versione 7 è adesso ufficialmente rimosso quindi bisogna fare molta attenzione qui ci sono dei link che potrebbero esservi utili per approfondire il discorso la considerazione che finale che possiamo fare è che wordpress 5.6 è da considerare in una versione beta compatibile questo vuol dire che è già un buon punto di partenza quindi ha superato g e la super php8 e ha superato il unit test però attenzione perché è in beta quindi può sempre saltare fuori qualche cosa non è ancora in ga in una versione stabile e ci sono tantissimi temi e plugins che potrebbero creare problemi quindi attenzione cerchiamo di fare un passaggio graduale e di utilizzare il git può essere utile ma anche qui vediamo di fare fare dei test pochino più approfonditi prima di esultare in modo definitivo la ultima slide che vorrei dire presentarvi è questa fondamentalmente vi do alcuni link che riputo possono essere interessanti per voi per quanto riguarda appunto la base di wordpress che è il php e quindi c'è un webinar registrato appunto sul php8 c'è un altro webinar git dove sicuramente andrete a esplorare in modo molto profondito il git e a capire meglio come funziona nel dettaglio e come come configurare il git e come utilizzarlo al meglio quindi vi invito a vedere anche questo tipo di webinar poi tenete presente che ci sono due blog che andiamo ad alimentare man mano che abbiamo novità in merito a questi argomenti che sono quello relativo al php8 e al git quindi vi invito ad andare a approfondire il materiale verrà comunque condiviso tenete presente va bene questa è una è un rifuso della presentazione che l'ha fatto metthew zender sostanzialmente può fornire aiuto nella migrazione all'ultima versione del php parlo della applicazione più generiche eventualmente può dare una mano a coloro che vogliono rimanere su una specifica versione php che è già in end of life questo perché abbiamo un runtime proprietario che è anche distribuito open ma si si può richiedere il supporto ovviamente a pagamento e che consente anche il long term support quindi andiamo a supportare ancora la versione 5.6 del php questi sono i miei indizi e mail se avete Elena at zender.com vi risponderò da enabela at zenderforce.com quindi segnatevi se volete mandatemi pure un email con rettifiche con domande con richieste particolari e sono più che contenta di darvi una mano e di indirizzarvi nella giusta direzione. Grazie davvero Elena è stato davvero un intervento molto molto interessante e grazie a tutti anche i partecipanti perché l'argomento era veramente dario per esempio anche dare ti ringrazia l'argomento era veramente interessante e abbastanza tecnico devo dire Guglielmo anche ti ringrazia e la partecipazione è stata veramente molto molto bella piacere spero che ci siamo anche altre occasione per approfondire altri argomenti che comunque abbiamo anche la possibilità eventualmente di coinvolgere zev solaschi che ormai è focalizzato al 100% su WordPress e in un momento in cui uno potremmo poi approfondire argomenti specifici sul tema quindi fondamentalmente questo è solo l'inizio del duro lavoro che dovremmo affrontarne come Netflix è come l'episode pilota questo sì sì questo è un episodio pilota che vi aiuterà ad approfondire magari anche a correggere a perfezionare quello che ho detto perché perché sicuramente siete molto più tecnici voi alla fine di quanto possa esserlo io e mi piacerebbe riuscire anche ad avere quindi un nuovo nuovo modo di di comunicare di aprirmi verso il vostro in vostro infatti anche le domani è stata veramente anche interessanti e c'è stata una bella interazione quindi davvero grazie a tutti andrei anche ringrazia anche stefano anche calogero anche paolo sanno ringraziano tutti della chat paolo dice che andrà a vedere anche il webinar e ringrazia anche tutto il gruppo grazie anche è fatto davvero grazie davvero veramente molto interessante e non so se maristo si vuole dire ancora qualcosa anche tu ma io nulla se segua ruota di nuovo i ringraziali ti passiamo ci siamo ci rindiciamo le stesse cose e quindi nulla magari davvero fra sei mesi un anno facciamo facciamo il punto della situazione e vediamo un po come quanti hosting intanto avranno installato pi hp 8 perché questo è un altro elemento poi da da capire che potrebbe essere un argomento di un altro di un altro mitapp no perché anche le buone intenzioni a volte sono tarpate un po dalle lasciami dire l'ultima cosa poi prometto ma tendenzialmente le maggior release vengono guardate con molta paura perché sono meglio release io confido che nelle release successive in una 8.2 e 3 4 ci siano decisamente dei perfezionamenti del linguaggio e delle risoluzioni di problemi che sicuramente mergeranno come come sempre succede quindi andiamo chicati però facciamo delle prove facciamo dei test eventualmente evidenziamo anche quelle difficilità che vengono ma dopo la sette ci siamo sbloccati siamo rimasti tantissimi anni fermi adesso sono piacati per fortuna il ciclo di vita della 8 avrà più o meno gli stessi anni della sette si poi chi lo sa adesso come adesso è tutto va a vedere parleremo anche di questo e darvi anche delle indicazioni di rimanere in contatto e faremo in modo anche di dire che magari anche di persona se capiterà questa grazie ma grazie di persone veramente grazie a tutti e davvero grazie a tutti i partecipanti grazie arena e ci vediamo al prossimo mitato buonasera buonasera a tutti ciao ciao