{"id":231204,"date":"2022-12-29T18:08:00","date_gmt":"2022-12-29T15:08:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231204"},"modified":"2022-12-29T18:11:42","modified_gmt":"2022-12-29T15:11:42","slug":"skriver-baettre-wordpress-kod-phpstan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/skriver-baettre-wordpress-kod-phpstan\/","title":{"rendered":"Skriver b\u00e4ttre WordPress-kod: PHPStan"},"content":{"rendered":"\n<p>I det senaste inl\u00e4gget i den h\u00e4r serien (som visserligen \u00e4r ett tag sedan) pratade jag l\u00e4nge om <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/verktyg-foer-att-skriva-baettre-wordpress-kod-composer\/\" title=\"Composer\">Composer<\/a> och <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/baettre-wordpress-kod-composer-lock-filen\/\" title=\"dess l\u00e5sfil.\">dess l\u00e5sfil.<\/a><\/p>\n<p>Jag rekommenderar att du l\u00e4ser de tv\u00e5 f\u00f6reg\u00e5ende artiklarna eftersom Composer s\u00e5 sm\u00e5ningom kommer att spela en roll i detta material som detta och framtida inl\u00e4gg kommer att dela. Men om du v\u00e4ljer att inte komma ikapp dem (eller redan \u00e4r bekant med Composer) s\u00e5 \u00e4r k\u00e4rnan i de tidigare inl\u00e4ggen f\u00f6ljande:<\/p>\n<blockquote>\n<p>Jag rekommenderar inte att du kontrollerar leverant\u00f6rskatalogen i ditt arkiv. Det kan bli en enorm katalog senare, och det kan undergr\u00e4va hela syftet med Composer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/verktyg-foer-att-skriva-baettre-wordpress-kod-composer\/\" title=\"Komposit\u00f6r\">Komposit\u00f6r<\/a><\/p>\n<p>M\u00e5let \u00e4r att se till att alla k\u00f6r samma version av projektets beroenden \u2013 inte \u00e4ldre versioner, inte nyare versioner \u2013 utan samma version.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/baettre-wordpress-kod-composer-lock-filen\/\" title=\"Composer Lock-filen\">Composer Lock-filen<\/a><\/p>\n<\/blockquote>\n<p>Med det sagt finns det m\u00e5nga beroenden eller paket som vi kan installera som hj\u00e4lper oss att se till att vi skriver h\u00f6gsta m\u00f6jliga kvalitetskod.<\/p>\n<p>Visst, n\u00e5gra av dessa kan vara i form av n\u00e5got som kodningsstandarder, men det \u00e4r egentligen fler regler \u00e4n vad de \u00e4r element f\u00f6r att skriva h\u00f6gkvalitativ kod (\u00e4ven om jag inte tycker att de ska l\u00e4mnas utanf\u00f6r diskussionen \u2013 bara utel\u00e4mnas vid den h\u00e4r tiden \ud83d\ude43).<\/p>\n<p>Tillbaka till verktygen i fr\u00e5ga: Vilka \u00e4r n\u00e5gra verktyg som hj\u00e4lper till att skriva h\u00f6gkvalitativ WordPress-kod? Jag ska dela med mig av n\u00e5gra av mina favoriter och dem ska jag prata om hur vi kan k\u00f6ra dem alla mot en kodbas.<\/p>\n<p>L\u00e5t oss f\u00f6rst ta en titt p\u00e5 statisk analys med <a href=\"https:\/\/github.com\/phpstan\/phpstan\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPStan<\/a>.<\/p>\n<h2>B\u00e4ttre WordPress-kod med PHPStan<\/h2>\n<h3>Vad \u00e4r statisk analys, egentligen?<\/h3>\n<p>F\u00f6rst n\u00e5gra ord om statisk analys. N\u00e4mligen, vad \u00e4r det? Det \u00e4r en munsbit, f\u00f6r en sak:<\/p>\n<blockquote>\n<p>Statisk kodanalys (\u00e4ven k\u00e4nd som k\u00e4llkodsanalys) utf\u00f6rs vanligtvis som en del av en kodgranskning (\u00e4ven k\u00e4nd som white-box-testning) och utf\u00f6rs i implementeringsfasen av en s\u00e4kerhetsutvecklingslivscykel (SDL).<\/p>\n<p>Statisk kodanalys h\u00e4nvisar vanligtvis till anv\u00e4ndningen av verktyg f\u00f6r statisk kodanalys som f\u00f6rs\u00f6ker lyfta fram m\u00f6jliga s\u00e5rbarheter i &quot;statisk&quot; (icke-k\u00f6rande) k\u00e4llkod genom att anv\u00e4nda tekniker som Taint Analysis och Data Flow Analysis.<\/p>\n<p><a href=\"https:\/\/www.owasp.org\/index.php\/Static_Code_Analysis\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Statisk kodanalys via OWASP<\/a><\/p>\n<\/blockquote>\n<p>T\u00e4nk p\u00e5 det s\u00e5 h\u00e4r: Det \u00e4r ett s\u00e4tt att analysera ett program f\u00f6r potentiella fel som du kanske inte ser n\u00e4r du arbetar med kodbasen.<\/p>\n<p>Det vill s\u00e4ga att det finns problem, buggar, s\u00e4kerhetsproblem som kan finnas men som du inte kan uppt\u00e4cka av ett antal anledningar (den minsta \u00e4r att du \u00e4r f\u00f6r n\u00e4ra koden).<\/p>\n<p>Med tiden har dock utvecklingsgemenskapen l\u00e4rt sig s\u00e4tt att analysera kod, generera upps\u00e4ttningar regler och bygga verktyg f\u00f6r att hitta exakt allt ovanst\u00e5ende.<\/p>\n<h3>Statisk analys av WordPress-centrerad kod<\/h3>\n<p>Och det \u00e4r h\u00e4r PHPStan kommer in i bilden.<\/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=\"Skriver b\u00e4ttre WordPress-kod: PHPStan\"><\/a><\/p>\n<p>Som n\u00e4mnts \u00e4r m\u00e5let med paketet att identifiera fel eller buggar som finns i din kod innan din kod anv\u00e4nds av n\u00e5gon annan \u00e4n utvecklare, markera dem och ge dig m\u00f6jlighet att fixa dem.<\/p>\n<p>Eftersom verktyg som detta unders\u00f6ker en kodbas (mot att k\u00f6ra koden), \u00e4r det inte alltid m\u00f6jligt att f\u00e5 en tydlig bild. Det betyder att vi kan f\u00e5 falska positiva resultat.<\/p>\n<p>Mer om detta om ett \u00f6gonblick dock.<\/p>\n<p>Om du \u00e4r intresserad av att komma ig\u00e5ng med att k\u00f6ra PHPStan mot din kodbas \u00e4r det enkelt. N\u00e4r du har installerat det, kom bara ih\u00e5g att konfigurera det s\u00e5 att det inte ser ut i <code>vendor<\/code>katalogen eller, s\u00e4g, WordPress-k\u00e4rnan.<\/p>\n<p>L\u00e5t den ist\u00e4llet unders\u00f6ka din kod.<\/p>\n<h3>Installerar PHPStan<\/h3>\n<p>L\u00e4gg f\u00f6rst till f\u00f6ljande rad i sektionen i din <code>composer.json<\/code>fil :<code>require-dev<\/code><\/p>\n<p><code>\"phpstan\/phpstan\": \"^0.11.12\"<\/code><\/p>\n<p>K\u00f6r sedan <code>composer update<\/code>i din terminal.<\/p>\n<p>N\u00e4r den v\u00e4l har installerats kan du k\u00f6ra den mot en enskild fil, en katalog eller en upps\u00e4ttning kataloger. Om du har l\u00e4st mina tidigare inl\u00e4gg om kodorganisation, s\u00e5 vet du att jag \u00e4r ett fan av att beh\u00e5lla majoriteten av projektets k\u00e4llkod i <code>src<\/code>dig kan k\u00f6ra n\u00e5got s\u00e5 h\u00e4r:<\/p>\n<p><code>$ vendor\/bin\/phpstan analyse src<\/code><\/p>\n<p>Detta kommer att generera utdata baserat p\u00e5 vad verktyget hittar.<\/p>\n<p>Kommer du ih\u00e5g tidigare n\u00e4r jag sa att det kan hitta saker som falska positiva? H\u00e4r \u00e4r en mer detaljerad sammanfattning av vad du kan se:<\/p>\n<ul>\n<li>Extra argument som skickas till funktioner (t.ex. funktion kr\u00e4ver tv\u00e5 argument, koden skickar tre)<\/li>\n<li>Extra argument som skickas till print\/sprintf-funktioner (t.ex. formatstr\u00e4ng inneh\u00e5ller en platsh\u00e5llare, koden skickar tv\u00e5 v\u00e4rden f\u00f6r att ers\u00e4tta)<\/li>\n<li>Uppenbara fel i d\u00f6d kod<\/li>\n<li>Magiskt beteende som m\u00e5ste definieras.<\/li>\n<\/ul>\n<p>Allt ovanst\u00e5ende direkt fr\u00e5n <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6rvaret<\/a>.<\/p>\n<p>Det \u00e4r h\u00e4r <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12#rule-levels\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">regelniv\u00e5er<\/a> kan g\u00f6ra stor skillnad, \u00e4ven om det kan kr\u00e4va lite justeringar f\u00f6r att f\u00e5 det till en niv\u00e5 som \u00e4r precis r\u00e4tt f\u00f6r ditt team eller ditt projekt.<\/p>\n<h3>Vad s\u00e4gs om analys f\u00f6r WordPress?<\/h3>\n<p>Viktor Sz\u00e9pe delade <a href=\"https:\/\/packagist.org\/packages\/szepeviktor\/phpstan-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">den h\u00e4r resursen<\/a> med mig (n\u00e5got han faktiskt har skrivit) och jag tycker att det \u00e4r n\u00e5got relevant och anv\u00e4ndbart. Tanken med paketet \u00e4r enkel:<\/p>\n<blockquote>\n<p>Det l\u00f6ser alla problem jag hade under analys av kod f\u00f6r WordPress.<\/p>\n<\/blockquote>\n<p>Inte illa, eller hur?<\/p>\n<h2>Analysera din kod<\/h2>\n<p>Oavsett ditt projekt, din kodorganisation eller p\u00e5 vilken niv\u00e5 du k\u00f6r just detta verktyg, \u00e4r po\u00e4ngen alltid att f\u00f6rb\u00e4ttra kvaliteten p\u00e5 vi skriver WordPress-kod.<\/p>\n<p>Att installera detta som ett Composer-paket och sedan k\u00f6ra det mot din <code>src<\/code>katalog \u00e4r ett steg i r\u00e4tt riktning.<\/p>\n<p>Som tidigare n\u00e4mnts kommer jag att dela med mig av n\u00e5gra andra verktyg och jag kommer sedan att dela hur man k\u00f6r dem alla mot en kodbas innan jag \u00f6verf\u00f6r koden till ett arkiv.<\/p>\n<h3>Notera<\/h3>\n<p>Om du har problem med att f\u00f6rs\u00f6ka konfigurera paketet, kontaktade <a href=\"https:\/\/davemackey.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dave Mackey<\/a> mig med ett liknande problem och dess <a href=\"https:\/\/github.com\/szepeviktor\/phpstan-wordpress\/issues\/8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l\u00f6sning<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tillbaka till verktygen i fr\u00e5ga: Vilka \u00e4r n\u00e5gra verktyg som hj\u00e4lper till att skriva h\u00f6gkvalitativ WordPress-kod? L\u00e5t oss b\u00f6rja med 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":[848,901,755,807,787,724],"tags":[1173],"class_list":["post-231204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-oeppen-kaella","category-php-9","category-programvara-med-oeppen-kaellkod","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=231204"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231204\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/236988"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=231204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=231204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=231204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}