{"id":231249,"date":"2022-12-29T17:56:00","date_gmt":"2022-12-29T14:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231249"},"modified":"2022-12-29T17:56:58","modified_gmt":"2022-12-29T14:56:58","slug":"parema-wordpressi-koodi-kirjutamine-phpstan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/parema-wordpressi-koodi-kirjutamine-phpstan\/","title":{"rendered":"Parema WordPressi koodi kirjutamine: PHPStan"},"content":{"rendered":"\n<p>Selle sarja viimases postituses (mis on t\u00f5si k\u00fcll, m\u00f5ni aeg tagasi) r\u00e4\u00e4kisin pikemalt <a href=\"https:\/\/wordpress.mediadoma.com\/et\/toeoeriistad-parema-wordpressi-koodi-kirjutamiseks-helilooja\/\" title=\"heliloojast\">heliloojast<\/a> ja <a href=\"https:\/\/wordpress.mediadoma.com\/et\/parem-wordpressi-kood-helilooja-lukustusfail\/\" title=\"selle lukufailist.\">selle lukufailist.<\/a><\/p>\n<p>Soovitan lugeda kahte eelmist artiklit, sest helilooja m\u00e4ngib l\u00f5puks selles materjalis rolli, mida see ja tulevased postitused jagavad. Kui aga otsustate neile mitte j\u00e4rele j\u00f5uda (v\u00f5i olete Composeriga juba tuttav), siis eelmiste postituste p\u00f5hisisu on vastavalt j\u00e4rgmine:<\/p>\n<blockquote>\n<p>Ma ei soovita hankija kataloogi oma hoidlasse kontrollida. Sellest v\u00f5ib hiljem saada tohutu kataloog ja see v\u00f5ib kahjustada kogu Composeri eesm\u00e4rki.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/et\/toeoeriistad-parema-wordpressi-koodi-kirjutamiseks-helilooja\/\" title=\"Helilooja\">Helilooja<\/a><\/p>\n<p>Eesm\u00e4rk on tagada, et k\u00f5igil oleks sama versioon projekti s\u00f5ltuvustest \u2013 mitte vanemaid ega uuemaid versioone, vaid sama versioon.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/et\/parem-wordpressi-kood-helilooja-lukustusfail\/\" title=\"Helilooja lukustusfail\">Helilooja lukustusfail<\/a><\/p>\n<\/blockquote>\n<p>Seda arvestades saame installida arvukalt s\u00f5ltuvusi v\u00f5i pakette, mis aitavad meil tagada, et kirjutame v\u00f5imalikult kvaliteetset koodi.<\/p>\n<p>Muidugi, m\u00f5ned neist v\u00f5ivad olla kodeerimisstandardite kujul, kuid need on t\u00f5esti rohkem reeglid kui kvaliteetse koodi kirjutamise elemendid (kuigi ma arvan, et neid ei tohiks arutelust v\u00e4lja j\u00e4tta \u2013 lihtsalt v\u00e4lja j\u00e4tta sel ajal \ud83d\ude43).<\/p>\n<p>Tagasi k\u00f5nealuste t\u00f6\u00f6riistade juurde: millised on m\u00f5ned t\u00f6\u00f6riistad, mis aitavad kirjutada kvaliteetset WordPressi koodi? Jagan m\u00f5nda oma lemmikut ja r\u00e4\u00e4gin neist, kuidas saaksime neid k\u00f5iki koodibaasi vastu k\u00e4ivitada.<\/p>\n<p>K\u00f5igepealt vaatame staatilist anal\u00fc\u00fcsi <a href=\"https:\/\/github.com\/phpstan\/phpstan\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPStaniga<\/a>.<\/p>\n<h2>Parem WordPressi kood PHPStaniga<\/h2>\n<h3>Mis on ikkagi staatiline anal\u00fc\u00fcs?<\/h3>\n<p>Esiteks paar s\u00f5na staatilise anal\u00fc\u00fcsi kohta. Nimelt, mis see on? See on \u00fcks suut\u00e4is:<\/p>\n<blockquote>\n<p>Staatiline koodi anal\u00fc\u00fcs (tuntud ka kui l\u00e4htekoodi anal\u00fc\u00fcs) tehakse tavaliselt osana koodi \u00fclevaatusest (tuntud ka kui valge kasti testimine) ja see viiakse l\u00e4bi turvaarenduse eluts\u00fckli (SDL) juurutamisetapis.<\/p>\n<p>Staatilise koodi anal\u00fc\u00fcs viitab tavaliselt staatilise koodi anal\u00fc\u00fcsi t\u00f6\u00f6riistade k\u00e4itamisele, mis p\u00fc\u00fcavad esile tuua v\u00f5imalikke haavatavusi \u201estaatilises&quot; (mittet\u00f6\u00f6tavas) l\u00e4htekoodis, kasutades selliseid tehnikaid nagu 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\">Staatilise koodi anal\u00fc\u00fcs OWASP-i kaudu<\/a><\/p>\n<\/blockquote>\n<p>M\u00f5elge sellele j\u00e4rgmiselt: see on viis programmi anal\u00fc\u00fcsimiseks v\u00f5imalike vigade suhtes, mida te ei pruugi koodibaasi kallal t\u00f6\u00f6tades n\u00e4ha.<\/p>\n<p>See t\u00e4hendab, et v\u00f5ib esineda probleeme, vigu ja turvaprobleeme, mida te ei saa mitmel p\u00f5hjusel tuvastada (v\u00e4ikseim neist on see, et olete koodile liiga l\u00e4hedal).<\/p>\n<p>Aja jooksul on aga arenduskogukond \u00f5ppinud koodi anal\u00fc\u00fcsimise, reeglistiku genereerimise ja t\u00f6\u00f6riistade loomise viise, mis aitavad t\u00e4pselt k\u00f5ike \u00fclalnimetatut leida.<\/p>\n<h3>WordPressi-keskse koodi staatiline anal\u00fc\u00fcs<\/h3>\n<p>Ja siin tuleb m\u00e4ngu 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=\"Parema WordPressi koodi kirjutamine: PHPStan\"><\/a><\/p>\n<p>Nagu mainitud, on paketi eesm\u00e4rk tuvastada teie koodis esinevad vead v\u00f5i vead enne, kui teie koodi kasutab keegi muu kui arendajad, need esile t\u00f5sta ja anda teile v\u00f5imalus need parandada.<\/p>\n<p>Kuna sellised t\u00f6\u00f6riistad uurivad koodibaasi (v\u00f5rreldes koodi k\u00e4itamisega), ei ole alati v\u00f5imalik selget pilti saada. See t\u00e4hendab, et v\u00f5ime saada valepositiivseid tulemusi.<\/p>\n<p>Sellest aga pikemalt m\u00f5ne aja p\u00e4rast.<\/p>\n<p>Kui olete huvitatud PHPStani k\u00e4ivitamisest oma koodibaasi vastu, on see lihtne. P\u00e4rast selle installimist \u00e4rge unustage seda lihtsalt seadistada nii, et see ei n\u00e4eks <code>vendor<\/code>kataloogi ega n\u00e4iteks WordPressi tuuma.<\/p>\n<p>Selle asemel paluge tal oma koodi uurida.<\/p>\n<h3>PHPStani installimine<\/h3>\n<p>Esmalt <code>composer.json<\/code>lisage oma faili jaotisesse j\u00e4rgmine rida <code>require-dev<\/code>:<\/p>\n<p><code>\"phpstan\/phpstan\": \"^0.11.12\"<\/code><\/p>\n<p>Seej\u00e4rel k\u00e4ivitage <code>composer update<\/code>oma terminalis.<\/p>\n<p>Kui see on installitud, saate seda k\u00e4ivitada \u00fcksiku faili, kataloogi v\u00f5i kataloogide komplekti vastu. Kui olete lugenud minu eelmisi postitusi koodikorralduse kohta, siis teate, et ma olen f\u00e4nn, kes hoiab suurema osa projekti l\u00e4htekoodist <code>src<\/code>teie k\u00e4sutuses, v\u00f5in k\u00e4ivitada midagi sellist:<\/p>\n<p><code>$ vendor\/bin\/phpstan analyse src<\/code><\/p>\n<p>See loob v\u00e4ljundi selle p\u00f5hjal, mida utiliit leiab.<\/p>\n<p>Kas m\u00e4letate varem, kui \u00fctlesin, et see v\u00f5ib leida selliseid asju nagu valepositiivsed tulemused? Siin on \u00fcksikasjalikum \u00fclevaade sellest, mida v\u00f5ite n\u00e4ha:<\/p>\n<ul>\n<li>Funktsioonidele edastatavad lisaargumendid (nt funktsioon n\u00f5uab kahte argumenti, kood edastab kolm)<\/li>\n<li>Funktsioonidele print\/sprintf edastatud lisaargumendid (nt vormingu string sisaldab \u00fchte kohahoidjat, kood edastab asendamiseks kaks v\u00e4\u00e4rtust)<\/li>\n<li>Ilmsed vead surnud koodis<\/li>\n<li>Maagiline k\u00e4itumine, mis tuleb m\u00e4\u00e4ratleda.<\/li>\n<\/ul>\n<p>K\u00f5ik \u00fclaltoodu otse <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hoidlast<\/a>.<\/p>\n<p>See on koht, kus <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12#rule-levels\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reeglitasemed<\/a> v\u00f5ivad k\u00f5ikv\u00f5imalikuks muuta, kuigi see v\u00f5ib vajada veidi kohandamist, et viia see tasemele, mis sobib teie meeskonna v\u00f5i projekti jaoks.<\/p>\n<h3>Aga WordPressi anal\u00fc\u00fcs?<\/h3>\n<p>Viktor Sz\u00e9pe jagas <a href=\"https:\/\/packagist.org\/packages\/szepeviktor\/phpstan-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seda ressurssi<\/a> minuga (tegelikult on tema autoriks) ja ma arvan, et see on midagi asjakohast ja kasulikku. Paketi idee on lihtne:<\/p>\n<blockquote>\n<p>See lahendab k\u00f5ik probleemid, mis mul tekkisid WordPressi koodi anal\u00fc\u00fcsimisel.<\/p>\n<\/blockquote>\n<p>Pole paha, eks?<\/p>\n<h2>Anal\u00fc\u00fcsige oma koodi<\/h2>\n<p>S\u00f5ltumata teie projektist, koodikorraldusest v\u00f5i sellest, millisel tasemel te seda konkreetset utiliiti k\u00e4itate, on alati eesm\u00e4rk parandada WordPressi koodi kirjutamise kvaliteedi taset.<\/p>\n<p>Selle installimine Composeri paketina ja seej\u00e4rel <code>src<\/code>kataloogis k\u00e4ivitamine on samm \u00f5iges suunas.<\/p>\n<p>Nagu eelnevalt \u00f6eldud, jagan ma m\u00f5nda muud t\u00f6\u00f6riista ja seej\u00e4rel jagan, kuidas neid k\u00f5iki enne koodi hoidlasse sisestamist koodibaasi vastu k\u00e4ivitada.<\/p>\n<h3>M\u00e4rge<\/h3>\n<p>Kui teil on paketi seadistamisel probleeme, v\u00f5ttis <a href=\"https:\/\/davemackey.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dave Mackey<\/a> minuga \u00fchendust sarnase probleemi ja selle <a href=\"https:\/\/github.com\/szepeviktor\/phpstan-wordpress\/issues\/8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lahendusega<\/a>.<\/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>Tagasi k\u00f5nealuste t\u00f6\u00f6riistade juurde: millised on m\u00f5ned t\u00f6\u00f6riistad, mis aitavad kirjutada kvaliteetset WordPressi koodi? Alustame PHPStaniga.<\/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":[718,749,781,894,842,802],"tags":[1165],"class_list":["post-231249","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-avatud-laehtekoodiga","category-avatud-laehtekoodiga-tarkvara","category-kood","category-opetused","category-php-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/231249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=231249"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/231249\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/236988"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=231249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=231249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=231249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}