{"id":229794,"date":"2022-11-10T13:20:00","date_gmt":"2022-11-10T10:20:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229794"},"modified":"2022-11-10T13:24:59","modified_gmt":"2022-11-10T10:24:59","slug":"wordpress-laajennusten-kirjastot-osa-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-laajennusten-kirjastot-osa-1\/","title":{"rendered":"WordPress-laajennusten kirjastot, osa 1"},"content":{"rendered":"\n<p>Mit\u00e4 enemm\u00e4n ty\u00f6skentelet WordPressin kanssa, varsinkin jos k\u00e4yt\u00e4t ty\u00f6kaluja, kuten <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composeria<\/a> ja vastaavia, sit\u00e4 todenn\u00e4k\u00f6isemmin l\u00f6yd\u00e4t tiettyj\u00e4 kirjastoja, ty\u00f6kaluja ja vastaavia asioita, jotka muodostavat perustan projekteille, joiden parissa ty\u00f6skentelet.<\/p>\n<p>Joskus saatat l\u00f6yt\u00e4\u00e4 ne, kun selaat muiden koodia, ehk\u00e4 l\u00f6yd\u00e4t ne selatessasi GitHubia, tai ehk\u00e4 <a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">joku<\/a> <a href=\"https:\/\/twitter.com\/twigpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, jonka<\/a> kanssa ty\u00f6skentelet, ehdottaa kirjastoa (tai muutamaa) projektista riippuen.<\/p>\n<p>Henkil\u00f6kohtaisesti minulla on kokemusta kaikista edell\u00e4 mainituista, ja mit\u00e4 enemm\u00e4n ty\u00f6skentelen ratkaisujen rakentamisessa itselleni tai muille, sit\u00e4 enemm\u00e4n huomaan luovani jokaiselle projektille samaa perustaa (joka on tyypillisesti jonkinlainen laajennus) .<\/p>\n<h2>Kirjastot WordPress-laajennuksille<\/h2>\n<p>T\u00e4t\u00e4 varten ajattelin, ett\u00e4 voisi olla syyt\u00e4 jakaa kirjastot, joita k\u00e4yt\u00e4n rakentaessani WordPress-laajennuksia. Sis\u00e4lt\u00f6 jaetaan muutamaan postaukseen, jotta jokainen pysyy lyhyin\u00e4 ja keskittyneen\u00e4, mutta ehk\u00e4 l\u00f6yd\u00e4t jotain, jota et ole aiemmin k\u00e4ytt\u00e4nyt (tai joka parantaa nykyist\u00e4 k\u00e4ytt\u00f6\u00e4si).<\/p>\n<h3><a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPUnit<\/a><\/h3>\n<p>Jokainen, joka on kirjoittanut koodia mill\u00e4 tahansa ohjelmointikielell\u00e4, tuntee todenn\u00e4k\u00f6isesti kaiken tyyppisen *Unit-kirjaston. Lyhyesti sanottuna se on tapa kirjoittaa yksikk\u00f6testej\u00e4 helposti.<\/p>\n<p>Projektin <a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kotisivuilta<\/a> :<\/p>\n<blockquote>\n<p>PHPUnit on ohjelmoijal\u00e4ht\u00f6inen testauskehys PHP:lle. Se on esimerkki xUnit-arkkitehtuurista yksikk\u00f6testauskehyksille.<\/p>\n<\/blockquote>\n<p>En ole joku, joka v\u00e4ltt\u00e4m\u00e4tt\u00e4 tilaa 100-prosenttista koodikattavuutta (ja se on toisen postauksen aihe), mutta jos aiot kirjoittaa yksikk\u00f6testej\u00e4, t\u00e4m\u00e4 on defacto-kirjasto koodisi yksikk\u00f6testaukseen.<\/p>\n<h3><a href=\"https:\/\/github.com\/phpro\/grumphp\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GrumPHP<\/a><\/h3>\n<p>Koko t\u00e4m\u00e4n vuoden aikana <a href=\"https:\/\/github.com\/phpro\/grumphp\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GrumPHP<\/a> :st\u00e4 on tullut kiistatta suosikkikirjastoni (vaikka sit\u00e4 ovat parantaneet lis\u00e4kirjastot, joita k\u00e4sittelen t\u00e4ss\u00e4 viestisarjassa).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166075-61e78ddea0549.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-166075-61e78ddea0549.png\" alt=\"WordPress-laajennusten kirjastot, osa 1\"><\/a><\/p>\n<p>Olen puhunut siit\u00e4 muissa viesteiss\u00e4. Vaikka se kuvailee itse\u00e4\u00e4n &quot;koodinlaadun ty\u00f6kaluksi&quot;, et todellakaan voi olla huomaamatta sen etuja, ennen kuin liit\u00e4t sen katsomaan koodia ennen kuin yrit\u00e4t sitoa sen arkistoon.<\/p>\n<p>Pidempi kuvaus on:<\/p>\n<blockquote>\n<p>Jos testit ep\u00e4onnistuvat, et voi vahvistaa muutoksiasi. T\u00e4m\u00e4 k\u00e4tev\u00e4 ty\u00f6kalu ei ainoastaan \u200b\u200bparanna koodikantaasi, vaan se my\u00f6s opettaa ty\u00f6tovereitasi kirjoittamaan parempaa koodia tiimin\u00e4 valitsemiesi parhaiden k\u00e4yt\u00e4nt\u00f6jen mukaisesti.<\/p>\n<\/blockquote>\n<p>Ja aivan kuin olisit k\u00e4ytt\u00e4nyt mit\u00e4 tahansa <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/psr-ien-kaeyttaeminen-versus-wordpress-coding-standards\/\" title=\"koodausstandardien\">koodausstandardien<\/a> n\u00e4ytt\u00f6\u00e4 IDE:ss\u00e4si, t\u00e4m\u00e4 on yksi niist\u00e4 asioista, joiden k\u00e4ytt\u00f6 voi olla aluksi turhauttavaa.<\/p>\n<p>Mutta kun opit sen, on helpompi tiet\u00e4\u00e4, mit\u00e4 se ilmoittaa, joten alat automaattisesti kirjoittaa koodia, jonka laatu on korkeampi.<\/p>\n<h3><a href=\"https:\/\/phpmd.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPMD<\/a><\/h3>\n<p><a href=\"https:\/\/phpmd.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPMD<\/a> (lyhenne sanoista PHP Mess Detector) toimii hyvin yhdess\u00e4 GrumPHP:n kanssa, koska se voi k\u00e4sitell\u00e4 koodisi ennen kuin siirr\u00e4t sen arkistoon.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166075-61e78de324f34.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-166075-61e78de324f34.png\" alt=\"WordPress-laajennusten kirjastot, osa 1\"><\/a><\/p>\n<p>Projekti kuvaa itse\u00e4\u00e4n seuraavasti:<\/p>\n<blockquote>\n<p>Se vaatii tietyn PHP-l\u00e4hdekoodipohjan ja etsii useita mahdollisia ongelmia kyseisess\u00e4 l\u00e4hteess\u00e4.<\/p>\n<\/blockquote>\n<p>Kuten monissa samankaltaisissa kirjastoissa, t\u00e4m\u00e4kin kirjasto voi m\u00e4\u00e4ritt\u00e4\u00e4 s\u00e4\u00e4nt\u00f6joukon, jotta voit helposti kytke\u00e4 asioita p\u00e4\u00e4lle ja pois p\u00e4\u00e4lt\u00e4 sen mukaan, mit\u00e4 sin\u00e4 tai tiimisi haluat.<\/p>\n<h3><a href=\"https:\/\/github.com\/nikic\/PHP-Parser\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP-j\u00e4sennin<\/a><\/h3>\n<p>Ajatus PHP-j\u00e4sennyskirjaston asetuksista koodin analysointiin vaikuttaa hieman metaa, eik\u00f6? Tarkoitan, ett\u00e4 sinulla on PHP-ajonaika, ja monet IDE:t tekev\u00e4t sen my\u00f6s, mutta t\u00e4m\u00e4 toimii hieman eri tavalla.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166075-61e78de6eec7f.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-166075-61e78de6eec7f.png\" alt=\"WordPress-laajennusten kirjastot, osa 1\"><\/a><\/p>\n<p>Arkistosta:<\/p>\n<blockquote>\n<p>T\u00e4m\u00e4 on PHP 5.2 &#8211; PHP 7.1 -j\u00e4sennin, joka on kirjoitettu PHP:ll\u00e4. Sen tarkoituksena on yksinkertaistaa staattisen koodin analysointia ja k\u00e4sittely\u00e4.<\/p>\n<\/blockquote>\n<p>Niille, jotka tuntevat ohjelmointikielten (ja siten kielioppien) toiminnan, ajatus koodin <a href=\"https:\/\/en.wikipedia.org\/wiki\/Static_program_analysis\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">staattisen analyysin<\/a> tekemisest\u00e4 on j\u00e4rkev\u00e4\u00e4.<\/p>\n<p>Siit\u00e4 huolimatta t\u00e4m\u00e4 on j\u00e4lleen yksi kirjasto, joka auttaa parantamaan koodin laatua v\u00e4hent\u00e4m\u00e4ll\u00e4 koodin monimutkaisuutta.<\/p>\n<h2>Lis\u00e4\u00e4 tulossa<\/h2>\n<p>Sarjan lopussa kerron kuinka sis\u00e4llyt\u00e4t n\u00e4m\u00e4 kaikki <code>composer.json<\/code>tiedostoksi, jota voit k\u00e4ytt\u00e4\u00e4 projektissasi.<\/p>\n<p>Kun ty\u00f6skentelet ratkaisun parissa asiakkaalle, saatat joutua muuttamaan n\u00e4iden ty\u00f6kalujen versioita, mutta huomaat, ett\u00e4 useimmat niist\u00e4 tarjoavat tukea PHP5.6:een ja PHP7.1:een asti.<\/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>Ensimm\u00e4inen postaus WordPress-laajennusten kirjastoista, joita tiimini ja min\u00e4 k\u00e4yt\u00e4mme ty\u00f6st\u00e4ess\u00e4mme laadukkaita ratkaisuja muille.<\/p>\n","protected":false},"author":1,"featured_media":166076,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[1018,719,917,864],"tags":[1166],"class_list":["post-229794","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hyodyllisia-sivustoja","category-kehittaejae","category-muut","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229794","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=229794"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229794\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166076"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229794"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}