{"id":229562,"date":"2022-11-04T10:35:00","date_gmt":"2022-11-04T07:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229562"},"modified":"2022-11-09T08:29:01","modified_gmt":"2022-11-09T05:29:01","slug":"muuttumattomista-arvoista-wordpress-laajennuksissa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/muuttumattomista-arvoista-wordpress-laajennuksissa\/","title":{"rendered":"Muuttumattomista arvoista WordPress-laajennuksissa"},"content":{"rendered":"\n<p>Jos olet tehnyt ty\u00f6t\u00e4 \u2013 tai edes lukenut \u2013 olio-ohjelmoinnin parissa, olet todenn\u00e4k\u00f6isesti t\u00f6rm\u00e4nnyt ajatukseen muuttumattomuudesta. Se on ajatus siit\u00e4, ett\u00e4 jokin on muuttumaton.<\/p>\n<p>Joskus sinulla voi olla muuttumattomia arvoja, ja joskus sinulla voi olla muuttumattomia objekteja (ainakin niiden instantiation j\u00e4lkeen).<\/p>\n<p>Muuttumattoman vastakohta (mutta h\u00e4n oli kuitenkin suosikkini ninjakilpikonna).<\/p>\n<p>Asia on siin\u00e4, ett\u00e4 mit\u00e4 enemm\u00e4n ty\u00f6skentelen oliopohjaisen koodin kanssa, sit\u00e4 v\u00e4hemm\u00e4n minulla on tapana ty\u00f6skennell\u00e4 muuttumattomien muuttujien kanssa. Toki, k\u00e4yt\u00e4n vakioita m\u00e4\u00e4ritystiedostossa m\u00e4\u00e4ritetyll\u00e4 tavalla, mutta et todenn\u00e4k\u00f6isesti l\u00f6yd\u00e4 minua tallentamassa arvoja luokkaan <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const<\/a>.<\/p>\n<p>Se luultavasti kertoo jotain minusta ja kyvyist\u00e4ni, mutta se on totta. Onneksi <a href=\"https:\/\/tommcfarlin.com\/code-reviews\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koodiarvostelut<\/a> auttavat sinua l\u00f6yt\u00e4m\u00e4\u00e4n mahdollisuuksia hy\u00f6dynt\u00e4\u00e4 strategioita, joita et normaalisti k\u00e4ytt\u00e4isi. Ja n\u00e4in on WordPress-laajennusten muuttumattomien arvojen tapauksessa.<\/p>\n<p>Tietenkin t\u00e4m\u00e4 on yksi niist\u00e4 asioista, jotka yst\u00e4v\u00e4ni kiinnittiv\u00e4t huomioni <a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koodiani<\/a> tarkistaessaan.<\/p>\n<p>WordPressin kanssa ty\u00f6skennelless\u00e4mme monet meist\u00e4 tuntevat todenn\u00e4k\u00f6isesti kohdat <strong>functions.php<\/strong> ja <strong>wp-config.php<\/strong> ja niiden roolin WordPress-ydinsovelluksessa.<\/p>\n<p>Kyll\u00e4, joskus asiat kuuluvat\u00a0 tiedostoon <strong>wp-config.php<\/strong>, ja kyll\u00e4, joskus asiat kuuluvat <strong>functions.php<\/strong> -tiedostoon, mutta joskus ajattelen, ett\u00e4 tietty\u00e4 tiedostoa k\u00e4ytet\u00e4\u00e4n v\u00e4\u00e4rin liian monilla funktioilla, arvoilla ja niin edelleen. .<\/p>\n<p>Mutta ent\u00e4 laajennukset? Tarkemmin sanottuna, ent\u00e4 oliopohjaiset laajennukset? Esimerkkin\u00e4 sanotaan, ett\u00e4 ty\u00f6skentelet sovellusliittym\u00e4n kanssa, joka vaatii API-avaimen, jotta et t\u00f6rm\u00e4\u00e4 tiettyyn nopeusrajoitukseen sovelluksen ilmaisella versiolla.<\/p>\n<p>Yleens\u00e4 saatat l\u00f6yt\u00e4\u00e4 minut tallentamasta arvoa p\u00e4\u00e4laajennusluokkaan esiintym\u00e4muuttujana, joka voidaan v\u00e4litt\u00e4\u00e4, tai ehk\u00e4 se on konttiluokassa, johon voin viitata ja k\u00e4ytt\u00e4\u00e4 sen <strong>get<\/strong> &#8211; menetelm\u00e4\u00e4.<\/p>\n<p>Mutta ent\u00e4 <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const<\/a> -ominaisuuden k\u00e4ytt\u00e4minen luokassa ja sen v\u00e4litt\u00e4minen setter-injektion kautta?<\/p>\n<p>Oletetaan esimerkiksi, ett\u00e4 on olemassa laajennusluokka, joka luottaa auttajaluokkaan hahmontamaan jotain n\u00e4yt\u00f6ll\u00e4. API-avain voidaan m\u00e4\u00e4ritell\u00e4 t\u00e4ss\u00e4 luokassa ja <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d588e0c45cf96bcd5f10614ccf432339#file-00-main-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">siirt\u00e4\u00e4 sitten apuohjelmaan tarvittaessa<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Main_Plugin {\n\n  const ACME_API_KEY = '123456789';\n\n  public function init() {\n\n    $helper = new Helper_Class();\n    $helper-&gt;render_acme_data( self::ACME_API_KEY );\n  }\n}<\/code><\/pre>\n<p>Seuraavaksi auttajaluokka voi soittaa mielivaltaiselle API:lle (kutsun sit\u00e4 Canvasiksi, koska olemme hypoteettisesti jotain) k\u00e4ytt\u00e4m\u00e4ll\u00e4 URL-osoitetta ja v\u00e4litt\u00e4\u00e4 API-avaimen osana kyselymerkkijonoa.<\/p>\n<pre><code>&lt;?php\n\nclass Helper_Class {\n\n  public function render_acme_data( string $api_key) {\n\n    $canvas_url = 'https:\/\/url-for-canvas.com?api_key='. $api_key;\n    $canvas = new Canvas( $canvas_url );\n\n    $canvas-&gt;draw();\n  }\n}<\/code><\/pre>\n<p>T\u00e4ll\u00e4 tavalla:<\/p>\n<ul>\n<li>on yksi paikka, jossa arvo s\u00e4ilytet\u00e4\u00e4n,<\/li>\n<li>siin\u00e4 on kuvaava nimi, joka osoittaa, mit\u00e4 se tallentaa,<\/li>\n<li>se voidaan siirt\u00e4\u00e4 muille luokille minimaalisella riippuvuudella,<\/li>\n<li>muut luokat voivat viitata niihin paikallisina muuttujina tai ilmentym\u00e4muuttujina (riippuen siit\u00e4, kuinka ne v\u00e4litet\u00e4\u00e4n).<\/li>\n<\/ul>\n<p>Toki n\u00e4m\u00e4 arvot voidaan s\u00e4ilytt\u00e4\u00e4 muillakin tavoilla (taas k\u00e4ytt\u00e4m\u00e4ll\u00e4 <strong>functions.php<\/strong> :t\u00e4 tai jotain vastaavaa).<\/p>\n<p>Mutta jos ty\u00f6skentelet olio-ohjelmoinnin kanssa ja haluat ty\u00f6skennell\u00e4 muuttumattomien arvojen kanssa WordPress-laajennuksessa, eik\u00f6 olisi j\u00e4rkev\u00e4\u00e4 pit\u00e4\u00e4 sit\u00e4 laajennuksen muodostavien luokkien yhteydess\u00e4?<\/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>Koodiarvostelut auttavat sinua l\u00f6yt\u00e4m\u00e4\u00e4n mahdollisuuksia, joissa voit hy\u00f6dynt\u00e4\u00e4 tekniikoita, joita saatat j\u00e4tt\u00e4\u00e4 k\u00e4ytt\u00e4m\u00e4tt\u00e4. N\u00e4in on WordPress-laajennusten muuttumattomien arvojen kohdalla.<\/p>\n","protected":false},"author":1,"featured_media":166654,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,917,843,803,864],"tags":[1166],"class_list":["post-229562","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-muut","category-opetusohjelmia","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229562","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=229562"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229562\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166654"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}