{"id":229730,"date":"2022-11-08T18:44:00","date_gmt":"2022-11-08T15:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229730"},"modified":"2022-11-09T16:08:06","modified_gmt":"2022-11-09T13:08:06","slug":"peruskoodausstandardit-psr-1-n-kautta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/peruskoodausstandardit-psr-1-n-kautta\/","title":{"rendered":"Peruskoodausstandardit PSR-1:n kautta"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/psr-ien-kaeyttaeminen-versus-wordpress-coding-standards\/\" title=\"Eilen\" >Eilen<\/a> puhuin lyhyesti PSR:n k\u00e4yt\u00f6n perusteista <a href=\"https:\/\/codex.wordpress.org\/WordPress_Coding_Standards\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressin<\/a> <a href=\"http:\/\/www.php-fig.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koodausstandardeihin<\/a> verrattuna ja molempien milloin ja miksi. Mutta se ei tarkoita, etteik\u00f6 se olisi ilman sekaannuksia, varsinkin jos olet vasta aloittamassa niist\u00e4, eik\u00f6 niin?<a href=\"https:\/\/codex.wordpress.org\/WordPress_Coding_Standards\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<p>T\u00e4ll\u00e4 tarkoitan: Oletetaan, ett\u00e4 olet ty\u00f6skennellyt WordPress-koodausstandardien kanssa vuosia (koska voin samaistua), ja nyt on noudatettava n\u00e4it\u00e4 uusia s\u00e4\u00e4nt\u00f6j\u00e4 ja ohjeita. Mutta se ei ole kuin pelkk\u00e4 v\u00e4lily\u00f6ntien muuttaminen ja tiedostojen uudelleennime\u00e4minen.<\/p>\n<p>On muitakin huomioitavia kohtia, ja jokainen on hahmoteltu numeroina, aivan kirjaimellisesti (PSR-1, PSR-2 ja niin edelleen), kuinka jonkin pit\u00e4isi toimia.<\/p>\n<p>Mit\u00e4 ongelmia saatamme kohdata WordPress-kehitt\u00e4jin\u00e4, kun kyse on vain PSR-1:ss\u00e4 kuvatuista peruskoodausstandardeista?<\/p>\n<h2>Koodauksen perusstandardit (ja sivuvaikutukset)<\/h2>\n<p>Minulla ei ole aikomusta k\u00e4yd\u00e4 l\u00e4pi jokaista dokumenttia ja toistaa sit\u00e4, mit\u00e4 voimme jo oppia <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lukemalla ne<\/a>, mutta mielest\u00e4ni on sanottavaa, ett\u00e4 otamme jotain, mit\u00e4 monet meist\u00e4 tekev\u00e4t tai kokevat, ja katsomme, kuinka t\u00e4m\u00e4 voi muuttua sis\u00e4ll\u00e4. WordPressin kontekstissa.<\/p>\n<p>Otetaan peruskoodausstandardin (tai <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1 :n)<\/a> <strong>sivuvaikutukset<\/strong> esimerkiksi:<a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<blockquote>\n<p>Tiedoston PIT\u00c4\u00c4 ilmoittaa uusia symboleja (luokat, funktiot, vakiot jne.) eik\u00e4 aiheuta muita sivuvaikutuksia, tai sen PIT\u00c4\u00c4 suorittaa logiikkaa sivuvaikutuksineen, mutta EI SID\u00c4 tehd\u00e4 molempia.<\/p>\n<p>Ilmaus &quot;sivuvaikutukset&quot; tarkoittaa logiikan suorittamista, joka ei liity suoraan luokkien, funktioiden, vakioiden jne. ilmoittamiseen, pelk\u00e4st\u00e4\u00e4n tiedoston sis\u00e4llytt\u00e4misest\u00e4.<\/p>\n<\/blockquote>\n<p>Henkil\u00f6kohtaisesti pid\u00e4n toista lausetta avaimena koodimme sivuvaikutusten ymm\u00e4rt\u00e4miseen ja v\u00e4ltt\u00e4miseen niin paljon kuin mahdollista. Toisin sanoen kaiken, mit\u00e4 luokkamme tekev\u00e4t, tulee olla itsen\u00e4ist\u00e4 tai olla yhten\u00e4ist\u00e4 jonkin kanssa, joka on saatettu jollain tavalla injektoitua.<\/p>\n<p>Siit\u00e4 huolimatta sivuvaikutuksen tuovan koodin l\u00f6yt\u00e4minen ja sen puhdistaminen ei saisi olla liian vaikeaa. Itse asiassa k\u00e4yt\u00e4n itse\u00e4ni esimerkkin\u00e4.<\/p>\n<p>Katso t\u00e4m\u00e4 tietty <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-00-toggle-admin-notices-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koodinp\u00e4tk\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once( 'admin\/class-toggle-admin-notices-node.php' );\ninclude_once( 'admin\/interfaces\/interface-asset.php' );\ninclude_once( 'admin\/class-javascript-assets.php' );\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>T\u00e4m\u00e4 koodi on suoraan <a href=\"https:\/\/tommcfarlin.com\/wordpress-admin-notices\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Toggle Admin Noticesista<\/a>. My\u00f6nnett\u00e4k\u00f6\u00f6n, se on yksinkertainen, ja <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">arkisto<\/a> n\u00e4ytt\u00e4\u00e4 huomautuksen sen muuttamisesta. Se osoittaa kuitenkin pointin, eik\u00f6?<\/p>\n<p>Mik\u00e4 on ratkaisu? T\u00e4m\u00e4 tulee Autoloadingin muodossa (joka on my\u00f6s katettu <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> :ss\u00e4 ). Ent\u00e4 jos tekisin sen uudelleen, joten se seurasi PSR-1:t\u00e4 kunnolla? Sitten yksi tapa palauttaa se voi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-01-toggle-admin-notices-autoloading-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once 'inc\/autoload.php';\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>Onko t\u00e4m\u00e4 loistava esimerkki? Luultavasti ei. Mutta siin\u00e4 on muutakin kuin tiedostojen lis\u00e4\u00e4minen. N\u00e4iden tiedostojen mukaan lukien t\u00e4m\u00e4 yksitt\u00e4inen tiedosto tuo esiin erilaisia \u200b\u200bsivuvaikutuksia.<\/p>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 t\u00e4m\u00e4 yksi tiedosto yksin on vastuussa paljon enemm\u00e4n kuin vain noista nelj\u00e4st\u00e4 koodirivist\u00e4. Ajattele sit\u00e4 niin, ett\u00e4 se sis\u00e4lt\u00e4\u00e4 kaiken, mit\u00e4 muut tiedostot toteuttavat. Siin\u00e4 vaiheessa se muuttuu monimutkaisemmaksi.<\/p>\n<p>Joten ota t\u00e4m\u00e4 idea ja siirr\u00e4 se paljon laajempaan j\u00e4rjestelm\u00e4\u00e4n, niin n\u00e4et kuinka ja miksi t\u00e4m\u00e4 olisi ongelmallista.<\/p>\n<p>Tietysti on olemassa my\u00f6s vaihtoehtoisia tapoja. Ja t\u00e4m\u00e4 on vain yksi esimerkki. My\u00f6s itsetuhoista. Tarkoituksena ei ole niink\u00e4\u00e4n osoittaa lopullinen tapa tehd\u00e4 t\u00e4m\u00e4, vaan alkaa kylv\u00e4\u00e4 ajatuksia siit\u00e4, miten suunnittelemme, suunnittelemme, rakennamme ja sis\u00e4llyt\u00e4mme luokkia.<\/p>\n<h3>Ent\u00e4 n\u00e4kym\u00e4t?<\/h3>\n<p>Mit\u00e4 tulee lis\u00e4osien kirjoittamiseen, k\u00e4sittelen osittain sit\u00e4, mit\u00e4 k\u00e4ytt\u00e4j\u00e4t n\u00e4kev\u00e4t <strong>n\u00e4kymin\u00e4.\u00a0<\/strong>Mutta t\u00e4ss\u00e4 n\u00e4ytt\u00e4\u00e4 olevan saalis: Tiedostojen sis\u00e4llytt\u00e4mist\u00e4 pidet\u00e4\u00e4n huonona k\u00e4yt\u00e4nt\u00f6n\u00e4, koska se tuo mukanaan sivuvaikutuksia.<\/p>\n<p>Emme siis halua tuottaa luokillamme logiikkaa, vaan haluamme my\u00f6s erottaa esityksen liikelogiikasta.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166223-61e7906a0bf19.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-166223-61e7906a0bf19.png\" alt=\"Peruskoodausstandardit PSR-1:n kautta\" ><\/a><\/p>\n<p>Mit\u00e4 meid\u00e4n tulee tehd\u00e4?<\/p>\n<blockquote>\n<p>Kierre\u2026 on, ett\u00e4 aiomme k\u00e4ytt\u00e4\u00e4 olio-ohjelmointia tehd\u00e4ksemme sen. Suunnittelemme luokan, joka luo HTML:n PHP-mallin avulla.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/carlalexander.ca\/designing-class-generate-wordpress-html-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Joku muu<\/a> on k\u00e4sitellyt t\u00e4t\u00e4 perusteellisesti, ja suosittelen l\u00e4mpim\u00e4sti kyseisen postauksen lukemista sivuvaikutusten huomioimiseksi, niiden v\u00e4ltt\u00e4miseksi ja kiinteiden k\u00e4yt\u00e4nt\u00f6jen sis\u00e4llytt\u00e4miseksi mahdollisimman paljon.<\/p>\n<h2>\u2026Ja omaisuus ja niihin liittyv\u00e4t tiedostot?<\/h2>\n<p>Tied\u00e4n: Ajatus sivuvaikutuksista luopumisesta (puhumattakaan niiden tunnistamisesta) voi olla aluksi outo, varsinkin kun ajattelee tiettyj\u00e4 asioita, joita olemme tehneet niin kauan.<\/p>\n<p>Ja se voi her\u00e4tt\u00e4\u00e4 kysymyksi\u00e4, kuten: Onko JavaScript- tai CSS-tiedostojen sis\u00e4llytt\u00e4minen v\u00e4\u00e4rin? T\u00e4m\u00e4 on varmaankin toisen postauksen aihe. Muista kuitenkin, ett\u00e4 siihen liittyy suoraan API-ydintoimintoja, ja ne voivat olla osa luokkaa, joka on tiukasti vastuussa siit\u00e4.<\/p>\n<p>Jos luokan tarkoitus on tehd\u00e4 juuri se ja vain se ja se k\u00e4ytt\u00e4\u00e4 API-funktioita tehd\u00e4kseen sen, sanoisin, ett\u00e4 se on todenn\u00e4k\u00f6isesti kunnossa.<\/p>\n<p>Mutta poikkean siit\u00e4 toistaiseksi (ja ehk\u00e4 se on kommenttien aihe tai taas toinen viesti).<\/p>\n<p>Pid\u00e4 sen sijaan luokkasi kevyin\u00e4 ja m\u00e4\u00e4r\u00e4tietoisina. Heid\u00e4n tulisi toimia kuten <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1-<\/a> tiloissa ja v\u00e4ltt\u00e4\u00e4 tekem\u00e4st\u00e4 asioita, kuten &quot;[julistaa] uusia luokkia, funktioita, vakioita jne.&quot; ja &quot;[suorittaa] logiikkaa sivuvaikutuksineen.&quot;<\/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>Pid\u00e4 tunnit m\u00e4\u00e4r\u00e4tietoisina. V\u00e4lt\u00e4 sellaisia \u200b\u200basioita kuin &#8221;uusien luokkien, funktioiden, vakioiden jne. ilmoittaminen&#8221;. ja &#8221;[suorittaa] logiikkaa sivuvaikutuksineen.&#8221;<\/p>\n","protected":false},"author":1,"featured_media":166224,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719],"tags":[1166],"class_list":["post-229730","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229730","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=229730"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229730\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166224"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}