{"id":231804,"date":"2022-12-29T18:06:00","date_gmt":"2022-12-29T15:06:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231804"},"modified":"2022-12-29T18:06:40","modified_gmt":"2022-12-29T15:06:40","slug":"paremman-wordpress-koodin-kirjoittaminen-phpstan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/paremman-wordpress-koodin-kirjoittaminen-phpstan\/","title":{"rendered":"Paremman WordPress-koodin kirjoittaminen: PHPStan"},"content":{"rendered":"\n<p>T\u00e4m\u00e4n sarjan viimeisimm\u00e4ss\u00e4 viestiss\u00e4 (joka on tosin jonkin aikaa sitten), puhuin pitk\u00e4\u00e4n <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/tyoekalut-paremman-wordpress-koodin-kirjoittamiseen-saeveltaejae\/\" title=\"Composerista\">Composerista<\/a> ja <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/parempi-wordpress-koodi-saeveltaejaen-lukitustiedosto\/\" title=\"sen lukkotiedostosta.\">sen lukkotiedostosta.<\/a><\/p>\n<p>Suosittelen lukemaan kaksi edellist\u00e4 artikkelia, koska Composer tulee lopulta n\u00e4yttelem\u00e4\u00e4n roolia t\u00e4ss\u00e4 materiaalissa, jota t\u00e4m\u00e4 ja tulevat viestit jakavat. Mutta jos et halua seurata niit\u00e4 (tai olet jo perehtynyt Composeriin), aiempien viestien ydin on vastaavasti seuraava:<\/p>\n<blockquote>\n<p>En suosittele toimittajahakemiston tarkistamista arkistoon. Siit\u00e4 voi my\u00f6hemmin tulla valtava hakemisto, ja se voi heikent\u00e4\u00e4 Composerin koko tarkoitusta.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/tyoekalut-paremman-wordpress-koodin-kirjoittamiseen-saeveltaejae\/\" title=\"S\u00e4velt\u00e4j\u00e4\">S\u00e4velt\u00e4j\u00e4<\/a><\/p>\n<p>Tavoitteena on varmistaa, ett\u00e4 jokaisella on k\u00e4yt\u00f6ss\u00e4 sama versio projektin riippuvuuksista \u2013 ei vanhempia tai uudempia versioita \u2013 mutta sama versio.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/parempi-wordpress-koodi-saeveltaejaen-lukitustiedosto\/\" title=\"S\u00e4velt\u00e4j\u00e4n lukitustiedosto\">S\u00e4velt\u00e4j\u00e4n lukitustiedosto<\/a><\/p>\n<\/blockquote>\n<p>T\u00e4st\u00e4 huolimatta voimme asentaa lukuisia riippuvuuksia tai paketteja, jotka auttavat meit\u00e4 varmistamaan, ett\u00e4 kirjoitamme mahdollisimman korkealaatuista koodia.<\/p>\n<p>Toki jotkut n\u00e4ist\u00e4 voivat olla koodausstandardien kaltaisia, mutta ne ovat todellakin enemm\u00e4n s\u00e4\u00e4nt\u00f6j\u00e4 kuin elementtej\u00e4 korkealaatuisen koodin kirjoittamiseen (vaikka niit\u00e4 ei mielest\u00e4ni pit\u00e4isi j\u00e4tt\u00e4\u00e4 keskustelun ulkopuolelle &#8211; vain j\u00e4tt\u00e4\u00e4 pois t\u00e4h\u00e4n aikaan \ud83d\ude43).<\/p>\n<p>Takaisin kyseisiin ty\u00f6kaluihin: Mitk\u00e4 ty\u00f6kalut auttavat kirjoittamaan korkealaatuista WordPress-koodia? Aion jakaa muutaman suosikkini, ja aion puhua niist\u00e4 siit\u00e4, kuinka voimme k\u00e4ytt\u00e4\u00e4 niit\u00e4 kaikkia koodipohjaa vastaan.<\/p>\n<p>Katsotaanpa ensin staattista analyysi\u00e4 <a href=\"https:\/\/github.com\/phpstan\/phpstan\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPStanilla<\/a>.<\/p>\n<h2>Parempi WordPress-koodi PHPStanilla<\/h2>\n<h3>Mit\u00e4 staattinen analyysi muuten on?<\/h3>\n<p>Ensinn\u00e4kin muutama sana staattisesta analyysist\u00e4. Nimitt\u00e4in mik\u00e4 se on? Se on suupala ensinn\u00e4kin:<\/p>\n<blockquote>\n<p>Staattinen koodianalyysi (tunnetaan my\u00f6s nimell\u00e4 l\u00e4hdekoodianalyysi) suoritetaan yleens\u00e4 osana koodin tarkistusta (tunnetaan my\u00f6s nimell\u00e4 white-box -testaus) ja se suoritetaan Security Development Lifecyclen (SDL) k\u00e4ytt\u00f6\u00f6nottovaiheessa.<\/p>\n<p>Staattinen koodianalyysi viittaa tavallisesti staattisen koodin analyysity\u00f6kalujen k\u00e4ytt\u00f6\u00f6n, jotka yritt\u00e4v\u00e4t tuoda esiin mahdollisia haavoittuvuuksia &quot;staattisessa&quot; (ei-suorituskykyisess\u00e4) l\u00e4hdekoodissa k\u00e4ytt\u00e4m\u00e4ll\u00e4 tekniikoita, kuten Taint Analysis ja 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\">Staattinen koodianalyysi OWASP:n kautta<\/a><\/p>\n<\/blockquote>\n<p>Ajattele asiaa n\u00e4in: Se on tapa analysoida ohjelma mahdollisten virheiden varalta, joita et ehk\u00e4 n\u00e4e, kun ty\u00f6skentelet koodipohjan parissa.<\/p>\n<p>Toisin sanoen on olemassa ongelmia, bugeja, tietoturvaongelmia, joita voi esiinty\u00e4, mutta et voi havaita useista syist\u00e4 (joista v\u00e4hin on, ett\u00e4 olet liian l\u00e4hell\u00e4 koodia).<\/p>\n<p>Ajan mittaan kehitysyhteis\u00f6 on kuitenkin oppinut tapoja analysoida koodia, luoda s\u00e4\u00e4nt\u00f6joukkoja ja rakentaa ty\u00f6kaluja, jotka auttavat l\u00f6yt\u00e4m\u00e4\u00e4n t\u00e4sm\u00e4lleen kaikki edell\u00e4 mainitut.<\/p>\n<h3>WordPress-keskeisen koodin staattinen analyysi<\/h3>\n<p>Ja t\u00e4ss\u00e4 PHPStan tulee peliin.<\/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=\"Paremman WordPress-koodin kirjoittaminen: PHPStan\"><\/a><\/p>\n<p>Kuten mainittiin, paketin tavoitteena on tunnistaa koodissasi olevat virheet ennen kuin joku muu kuin kehitt\u00e4j\u00e4t k\u00e4ytt\u00e4v\u00e4t koodiasi, korostaa niit\u00e4 ja antaa sinulle mahdollisuus korjata ne.<\/p>\n<p>Koska t\u00e4m\u00e4nkaltaiset ty\u00f6kalut tutkivat koodipohjaa (verrattuna koodin suorittamiseen), ei aina ole mahdollista saada selke\u00e4\u00e4 kuvaa. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 voimme saada v\u00e4\u00e4ri\u00e4 positiivisia tuloksia.<\/p>\n<p>T\u00e4st\u00e4 kuitenkin lis\u00e4\u00e4 hetken kuluttua.<\/p>\n<p>Jos olet kiinnostunut aloittamaan PHPStanin k\u00e4ytt\u00e4misen koodipohjaasi vastaan, se on helppoa. Asennuksen j\u00e4lkeen muista vain m\u00e4\u00e4ritt\u00e4\u00e4 se niin, ett\u00e4 se ei n\u00e4y <code>vendor<\/code>hakemistossa tai vaikkapa WordPress-ytimess\u00e4.<\/p>\n<p>Sen sijaan pyyd\u00e4 sit\u00e4 tutkimaan koodisi.<\/p>\n<h3>PHPStanin asennus<\/h3>\n<p>Lis\u00e4\u00e4 ensin <code>composer.json<\/code>tiedostosi osioon seuraava rivi <code>require-dev<\/code>:<\/p>\n<p><code>\"phpstan\/phpstan\": \"^0.11.12\"<\/code><\/p>\n<p>Suorita <code>composer update<\/code>sitten terminaalissasi.<\/p>\n<p>Kun se on asennettu, voit k\u00e4ytt\u00e4\u00e4 sit\u00e4 yksitt\u00e4ist\u00e4 tiedostoa, hakemistoa tai hakemistojoukkoa vastaan. Jos olet lukenut aiemmat kirjoitukseni koodin organisoinnista, tied\u00e4t, ett\u00e4 pid\u00e4n suurimman osan projektin l\u00e4hdekoodista <code>src<\/code>mukanasi, saatat ajaa jotain t\u00e4llaista:<\/p>\n<p><code>$ vendor\/bin\/phpstan analyse src<\/code><\/p>\n<p>T\u00e4m\u00e4 tuottaa tulosteen sen perusteella, mit\u00e4 apuohjelma l\u00f6yt\u00e4\u00e4.<\/p>\n<p>Muistatko aiemmin, kun sanoin, ett\u00e4 se voi l\u00f6yt\u00e4\u00e4 asioita, kuten v\u00e4\u00e4ri\u00e4 positiivisia? T\u00e4ss\u00e4 on tarkempi yhteenveto siit\u00e4, mit\u00e4 saatat n\u00e4hd\u00e4:<\/p>\n<ul>\n<li>Funktioille v\u00e4litetyt lis\u00e4argumentit (esim. funktio vaatii kaksi argumenttia, koodi v\u00e4litt\u00e4\u00e4 kolme)<\/li>\n<li>Print\/sprintf-funktioille v\u00e4litetyt lis\u00e4argumentit (esim. muotomerkkijono sis\u00e4lt\u00e4\u00e4 yhden paikkamerkin, koodi v\u00e4litt\u00e4\u00e4 kaksi arvoa korvattavaksi)<\/li>\n<li>Ilmeisi\u00e4 virheit\u00e4 kuolleessa koodissa<\/li>\n<li>Maaginen k\u00e4ytt\u00e4ytyminen, joka on m\u00e4\u00e4ritelt\u00e4v\u00e4.<\/li>\n<\/ul>\n<p>Kaikki edell\u00e4 mainitut suoraan <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">arkistosta<\/a>.<\/p>\n<p>T\u00e4ss\u00e4 <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12#rule-levels\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e4\u00e4nt\u00f6tasoilla<\/a> voi olla suuri merkitys, vaikkakin se saattaa vaatia hieman s\u00e4\u00e4t\u00e4mist\u00e4, jotta saat sen tasolle, joka sopii tiimillesi tai projektillesi.<\/p>\n<h3>Ent\u00e4 WordPressin analyysi?<\/h3>\n<p>Viktor Sz\u00e9pe jakoi <a href=\"https:\/\/packagist.org\/packages\/szepeviktor\/phpstan-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4m\u00e4n resurssin<\/a> kanssani (jotain h\u00e4n itse asiassa on kirjoittanut), ja mielest\u00e4ni se on jotain olennaista ja hy\u00f6dyllist\u00e4. Paketin idea on yksinkertainen:<\/p>\n<blockquote>\n<p>Se ratkaisee kaikki ongelmat, joita minulla oli WordPress-koodin analysoinnin aikana.<\/p>\n<\/blockquote>\n<p>Ei paha, eik\u00f6?<\/p>\n<h2>Analysoi koodisi<\/h2>\n<p>Riippumatta projektistasi, koodiorganisaatiostasi tai mill\u00e4 tasolla k\u00e4yt\u00e4t t\u00e4t\u00e4 apuohjelmaa, tarkoituksena on aina parantaa WordPress-koodin kirjoittamisen laatutasoa.<\/p>\n<p>T\u00e4m\u00e4n asentaminen Composer-paketina ja sen suorittaminen <code>src<\/code>hakemistossasi on askel oikeaan suuntaan.<\/p>\n<p>Kuten aiemmin todettiin, aion jakaa muutamia muita ty\u00f6kaluja ja sitten jakaa, kuinka ne kaikki suoritetaan koodipohjaa vastaan \u200b\u200bennen koodin siirt\u00e4mist\u00e4 arkistoon.<\/p>\n<h3>Merkint\u00e4<\/h3>\n<p>Jos sinulla on ongelmia paketin m\u00e4\u00e4ritt\u00e4misess\u00e4, <a href=\"https:\/\/davemackey.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dave Mackey<\/a> otti minuun yhteytt\u00e4 samanlaisen ongelman ja sen <a href=\"https:\/\/github.com\/szepeviktor\/phpstan-wordpress\/issues\/8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ratkaisun<\/a> kanssa .<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Takaisin kyseisiin ty\u00f6kaluihin: Mitk\u00e4 ty\u00f6kalut auttavat kirjoittamaan korkealaatuista WordPress-koodia? Aloitetaan PHPStanilla.<\/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":[782,750,719,895,843,803],"tags":[1166],"class_list":["post-231804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoimen-laehdekoodin-ohjelmisto","category-avoin-laehdekoodi","category-kehittaejae","category-koodi","category-opetusohjelmia","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231804"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231804\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236988"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}