{"id":232001,"date":"2022-12-29T18:40:00","date_gmt":"2022-12-29T15:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232001"},"modified":"2022-12-29T18:42:10","modified_gmt":"2022-12-29T15:42:10","slug":"scrivere-un-codice-wordpress-migliore-phpstan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/scrivere-un-codice-wordpress-migliore-phpstan\/","title":{"rendered":"Scrivere un codice WordPress migliore: PHPStan"},"content":{"rendered":"\n<p>Nel post pi\u00f9 recente di questa serie (che \u00e8 certamente tempo fa), ho parlato a lungo di <a href=\"https:\/\/wordpress.mediadoma.com\/it\/strumenti-per-scrivere-un-codice-wordpress-migliore-composer\/\" title=\"Composer\">Composer<\/a> e del <a href=\"https:\/\/wordpress.mediadoma.com\/it\/codice-wordpress-migliore-il-file-di-blocco-del-compositore\/\" title=\"suo file di blocco.\">suo file di blocco.<\/a><\/p>\n<p>Raccomando di leggere i due articoli precedenti perch\u00e9 Composer alla fine giocher\u00e0 un ruolo in questo materiale che questo e i futuri post condivideranno. Ma se scegli di non raggiungerli (o hai gi\u00e0 familiarit\u00e0 con Composer), il succo dei post precedenti \u00e8, rispettivamente, il seguente:<\/p>\n<blockquote>\n<p>Non consiglio di controllare la directory del fornitore nel tuo repository. Questo pu\u00f2 diventare un&#8217;enorme directory in seguito e pu\u00f2 minare l&#8217;intero scopo di Composer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/it\/strumenti-per-scrivere-un-codice-wordpress-migliore-composer\/\" title=\"Compositore\">Compositore<\/a><\/p>\n<p>L&#8217;obiettivo \u00e8 assicurarsi che tutti eseguano la stessa versione delle dipendenze del progetto, non versioni precedenti, n\u00e9 versioni pi\u00f9 recenti, ma la stessa versione.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/it\/codice-wordpress-migliore-il-file-di-blocco-del-compositore\/\" title=\"Il file di blocco del compositore\">Il file di blocco del compositore<\/a><\/p>\n<\/blockquote>\n<p>Detto questo, ci sono numerose dipendenze o pacchetti che possiamo installare che ci aiutano a assicurarci di scrivere codice della massima qualit\u00e0 possibile.<\/p>\n<p>Certo, alcuni di questi possono avere la forma di qualcosa come gli standard di codifica, ma in realt\u00e0 sono pi\u00f9 regole che elementi per scrivere codice di alta qualit\u00e0 (anche se non penso che dovrebbero essere escluse dalla discussione, semplicemente tralasciate in questo momento \ud83d\ude43).<\/p>\n<p>Tornando agli strumenti in questione: quali sono alcuni strumenti che aiutano a scrivere codice WordPress di alta qualit\u00e0? Condivider\u00f2 alcuni dei miei preferiti e parler\u00f2 di come eseguirli tutti su una base di codice.<\/p>\n<p>Per prima cosa, diamo un&#8217;occhiata all&#8217;analisi statica con <a href=\"https:\/\/github.com\/phpstan\/phpstan\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPStan<\/a>.<\/p>\n<h2>Codice WordPress migliore con PHPStan<\/h2>\n<h3>Che cos&#8217;\u00e8 l&#8217;analisi statica, comunque?<\/h3>\n<p>Innanzitutto, qualche parola sull&#8217;analisi statica. Vale a dire, che cos&#8217;\u00e8? \u00c8 un boccone, tanto per cominciare:<\/p>\n<blockquote>\n<p>L&#8217;analisi statica del codice (nota anche come analisi del codice sorgente) viene solitamente eseguita come parte di una revisione del codice (nota anche come test white-box) e viene eseguita nella fase di implementazione di un ciclo di vita dello sviluppo della sicurezza (SDL).<\/p>\n<p>L&#8217;analisi del codice statico si riferisce comunemente all&#8217;esecuzione di strumenti di analisi del codice statico che tentano di evidenziare le possibili vulnerabilit\u00e0 all&#8217;interno del codice sorgente &quot;statico&quot; (non in esecuzione) utilizzando tecniche come l&#8217;analisi della contaminazione e l&#8217;analisi del flusso di dati.<\/p>\n<p><a href=\"https:\/\/www.owasp.org\/index.php\/Static_Code_Analysis\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Analisi del codice statico tramite OWASP<\/a><\/p>\n<\/blockquote>\n<p>Pensala in questo modo: \u00e8 un modo per analizzare un programma per potenziali errori che potresti non vedere quando lavori sulla base di codice.<\/p>\n<p>Cio\u00e8, ci sono problemi, bug, problemi di sicurezza, che possono essere presenti ma non puoi rilevare per una serie di motivi (l&#8217;ultimo dei quali \u00e8 che sei troppo vicino al codice).<\/p>\n<p>Nel corso del tempo, tuttavia, la comunit\u00e0 di sviluppo ha imparato i modi per analizzare il codice, generare insiemi di regole e creare strumenti per trovare esattamente tutto quanto sopra.<\/p>\n<h3>Analisi statica del codice incentrato su WordPress<\/h3>\n<p>Ed \u00e8 qui che entra in gioco PHPStan.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159518-61e6f6b3d2b7f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159518-61e6f6b3d2b7f.png\" alt=\"Scrivere un codice WordPress migliore: PHPStan\"><\/a><\/p>\n<p>Come accennato, l&#8217;obiettivo del pacchetto \u00e8 identificare errori o bug che esistono nel codice prima che il codice venga utilizzato da qualcuno diverso dagli sviluppatori, evidenziarli e darti l&#8217;opportunit\u00e0 di risolverli.<\/p>\n<p>Poich\u00e9 strumenti come questo esaminano una base di codice (anzich\u00e9 eseguire il codice), non \u00e8 sempre possibile ottenere un quadro chiaro. Ci\u00f2 significa che possiamo ottenere falsi positivi.<\/p>\n<p>Maggiori informazioni su questo in un momento per\u00f2.<\/p>\n<p>Se sei interessato a iniziare con l&#8217;esecuzione di PHPStan sulla tua base di codice, \u00e8 facile. Dopo averlo installato, ricordati di configurarlo in modo che non appaia nella <code>vendor<\/code>directory o, ad esempio, nel core di WordPress.<\/p>\n<p>Invece, fallo esaminare il tuo codice.<\/p>\n<h3>Installazione di PHPStan<\/h3>\n<p>Innanzitutto, nel tuo <code>composer.json<\/code>file, aggiungi la seguente riga nella <code>require-dev<\/code>sezione:<\/p>\n<p><code>\"phpstan\/phpstan\": \"^0.11.12\"<\/code><\/p>\n<p>Quindi esegui <code>composer update<\/code>nel tuo terminale.<\/p>\n<p>Una volta installato, puoi eseguirlo su un singolo file, una directory o un insieme di directory. Se hai letto i miei post precedenti sull&#8217;organizzazione del codice, allora sai che sono un fan di mantenere la maggior parte del codice sorgente del progetto dentro <code>src<\/code>di te, potresti eseguire qualcosa del genere:<\/p>\n<p><code>$ vendor\/bin\/phpstan analyse src<\/code><\/p>\n<p>Questo generer\u00e0 un output in base a ci\u00f2 che trova l&#8217;utilit\u00e0.<\/p>\n<p>Ricordi prima quando ho detto che potrebbe trovare cose come falsi positivi? Ecco un riassunto pi\u00f9 dettagliato di ci\u00f2 che potresti vedere:<\/p>\n<ul>\n<li>Argomenti extra passati alle funzioni (ad es. la funzione richiede due argomenti, il codice ne passa tre)<\/li>\n<li>Argomenti extra passati alle funzioni print\/sprintf (ad es. la stringa di formato contiene un segnaposto, il codice passa due valori da sostituire)<\/li>\n<li>Errori evidenti nel codice morto<\/li>\n<li>Comportamento magico che deve essere definito.<\/li>\n<\/ul>\n<p>Tutto quanto sopra direttamente dal <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repository<\/a>.<\/p>\n<p>\u00c8 qui che i <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12#rule-levels\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">livelli delle regole<\/a> possono fare la differenza, anche se potrebbe essere necessario un po&#8217; di ritocco per portarlo a un livello adatto alla tua squadra o al tuo progetto.<\/p>\n<h3>Che dire dell&#8217;analisi per WordPress?<\/h3>\n<p>Viktor Sz\u00e9pe ha condiviso <a href=\"https:\/\/packagist.org\/packages\/szepeviktor\/phpstan-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questa risorsa<\/a> con me (qualcosa di cui \u00e8 l&#8217;autore, in realt\u00e0) e penso che sia qualcosa di rilevante e utile. L&#8217;idea del pacchetto \u00e8 semplice:<\/p>\n<blockquote>\n<p>Risolve tutti i problemi che ho avuto durante l&#8217;analisi del codice per WordPress.<\/p>\n<\/blockquote>\n<p>Non male, vero?<\/p>\n<h2>Analizza il tuo codice<\/h2>\n<p>Indipendentemente dal tuo progetto, dalla tua organizzazione del codice o dal livello a cui esegui questa particolare utility, il punto \u00e8 sempre migliorare il livello di qualit\u00e0 del codice di WordPress che stiamo scrivendo.<\/p>\n<p>Installarlo come pacchetto Composer e quindi eseguirlo sulla tua <code>src<\/code>directory \u00e8 un passo nella giusta direzione.<\/p>\n<p>Come affermato in precedenza, condivider\u00f2 alcuni altri strumenti e condivider\u00f2 quindi come eseguirli tutti su una base di codice prima di eseguire il commit del codice in un repository.<\/p>\n<h3>Nota<\/h3>\n<p>Se hai un problema nel tentativo di configurare il pacchetto, <a href=\"https:\/\/davemackey.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dave Mackey<\/a> mi ha contattato con un problema simile e la sua <a href=\"https:\/\/github.com\/szepeviktor\/phpstan-wordpress\/issues\/8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">soluzione<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tornando agli strumenti in questione: quali sono alcuni strumenti che aiutano a scrivere codice WordPress di alta qualit\u00e0? Cominciamo con PHPStan.<\/p>\n","protected":false},"author":1,"featured_media":236988,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,751,804,783,720,844],"tags":[1168],"class_list":["post-232001","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-open-source-projektmanagement-3","category-php-6","category-software-open-source","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232001","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=232001"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232001\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236988"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=232001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=232001"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=232001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}