{"id":229703,"date":"2022-11-08T12:51:00","date_gmt":"2022-11-08T09:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229703"},"modified":"2022-11-09T16:01:08","modified_gmt":"2022-11-09T13:01:08","slug":"vaeltae-class_exists-oliopohjaisessa-wordpress-koodissa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/vaeltae-class_exists-oliopohjaisessa-wordpress-koodissa\/","title":{"rendered":"V\u00e4lt\u00e4 class_exists oliopohjaisessa WordPress-koodissa"},"content":{"rendered":"\n<p>Jos kirjoitat oliokoodia WordPressille (yleens\u00e4 laajennusten yhteydess\u00e4), t\u00f6rm\u00e4\u00e4t todenn\u00e4k\u00f6isesti class_exists-tarkistukseen ennen luokan alustamista. Mutta t\u00e4ss\u00e4 vaiheessa meid\u00e4n pit\u00e4isi alkaa v\u00e4ltt\u00e4\u00e4 class_exists-elementtej\u00e4 suuressa osassa koodiamme (muutamia poikkeuksia lukuun ottamatta, jotka esit\u00e4n alla).<\/p>\n<p>Riippuen k\u00e4ytt\u00e4m\u00e4st\u00e4si PHP-versiosta, t\u00e4m\u00e4 on j\u00e4rkev\u00e4\u00e4. Tai teki sen aikoinaan. PHP 5.3.0:sta l\u00e4htien t\u00e4m\u00e4 ei ole v\u00e4ltt\u00e4m\u00e4t\u00f6nt\u00e4. Sen sijaan on parempi k\u00e4yt\u00e4nt\u00f6 k\u00e4ytt\u00e4\u00e4 nimiavaruuksia.<\/p>\n<h2>V\u00e4lt\u00e4 class_exists<\/h2>\n<p>N\u00e4et kaikki vaatimukset WordPressin eri versioille <a href=\"https:\/\/codex.wordpress.org\/Template:Server_requirements\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4ll\u00e4 sivulla<\/a>, \u00a0joten jos ty\u00f6skentelet WordPressin vanhojen versioiden kanssa, koko class_exists-tarkistus saattaa olla sen arvoinen.<\/p>\n<p>Silti <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">on t\u00e4rke\u00e4 huomautus<\/a> :<\/p>\n<blockquote>\n<p>Huomautus: Jos olet vanhassa ymp\u00e4rist\u00f6ss\u00e4, jossa sinulla on vain vanhempia PHP- tai MySQL-versioita, WordPress toimii my\u00f6s PHP 5.2.4+ ja MySQL 5.0+ -versioiden kanssa, mutta n\u00e4m\u00e4 versiot ovat saavuttaneet virallisen End Of Lifen ja <strong>voivat siten altistaa sivustosi tietoturva-aukkoja<\/strong>.<\/p>\n<\/blockquote>\n<p>Mutta useimmille meist\u00e4 nykyaikaiset is\u00e4nn\u00f6intiymp\u00e4rist\u00f6t tukevat v\u00e4hint\u00e4\u00e4n PHP 5.3.0:aa, ellei uudempaa, ja sen vuoksi meid\u00e4n ei tarvitse k\u00e4ytt\u00e4\u00e4 class_exists-asetusta.<\/p>\n<p>T\u00e4st\u00e4 huolimatta ei ole harvinaista n\u00e4hd\u00e4 jotain <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-00-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4llaista<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (! class_exists( 'My_Unique_Class')) {\n class My_Unique_Class {\n   \/\/ class implementation\n }\n}\n<\/code><\/pre>\n<p>Tai <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-01-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4in<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (class_exists( 'My_Unique_Class')) {\n  return;\n}\n\nclass My_Unique_Class {\n   \/\/ class implementation\n}\n<\/code><\/pre>\n<p>Vuosia sitten kirjoitin my\u00f6s t\u00e4llaisen koodin. Joskus se oli rajapinta olemassa olevan koodikannan kanssa. Muina aikoina se johtui siit\u00e4, etten tiennyt paremmasta. Asia on, ett\u00e4 t\u00e4st\u00e4 on tullut jotain, mit\u00e4 n\u00e4emme WordPress-pohjaisessa koodissa, kun meid\u00e4n ei tarvitse k\u00e4ytt\u00e4\u00e4 sit\u00e4.<\/p>\n<p>Itse asiassa v\u00e4itt\u00e4isin, ett\u00e4 meid\u00e4n ei pit\u00e4isi k\u00e4ytt\u00e4\u00e4 sit\u00e4 en\u00e4\u00e4.<\/p>\n<p>Mutta mit\u00e4 enemm\u00e4n koodia kirjoitat ja mit\u00e4 enemm\u00e4n koodia luet, sit\u00e4 enemm\u00e4n opit, eik\u00f6 niin? Se on osa koko syyt\u00e4 nimiavaruuksiin ja automaattiseen lataamiseen.<\/p>\n<\/p>\n<p>Joten miten yll\u00e4 oleva koodi kirjoitettaisiin?<\/p>\n<p>Ehk\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-02-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4in<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TomMcFarlin;\n\nclass My_Unique_Class {\n  \/\/ class implementation\n}\n<\/code><\/pre>\n<p>T\u00e4m\u00e4 her\u00e4tt\u00e4\u00e4 kuitenkin kysymyksen: kuinka nimiavaruudet auttavat class_exists-k\u00e4yt\u00f6n sijaan?<\/p>\n<p>Ihannetapauksessa, jos sama luokka on olemassa nimiavaruudessa, nimiavaruudessa on ongelma. Muista, ett\u00e4 <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nimitilat-ja-automaattinen-lataus-wordpressissae\/\" title=\"voit ajatella nimiavaruutta\">voit ajatella nimiavaruutta<\/a> kuin pakettia, joka koostuu ainutlaatuisista osista. Ja koska ne ovat ainutlaatuisia, ei koskaan pit\u00e4isi olla toista kappaletta tai t\u00e4ss\u00e4 luokassa toista samanlaista luokkaa.<\/p>\n<p>T\u00e4t\u00e4 tarkoitusta varten pyrit\u00e4 k\u00e4ytt\u00e4m\u00e4\u00e4n nimiavaruuksia class_exists-tarkistusten sijaan. En tietenk\u00e4\u00e4n tarkoita, ett\u00e4 palaa takaisin ja muokkaa koko koodisi uudelleen \u2013 en ole tehnyt niin \u2013 mutta se ei tarkoita, ett\u00e4 kirjoittamani tai tarkistamani koodi sis\u00e4lt\u00e4v\u00e4t sen k\u00e4ytt\u00f6\u00e4 tai suosituksia.<\/p>\n<p>Se on helppo muutos, joka voi auttaa pit\u00e4m\u00e4\u00e4n koodin helpommin luettavana, t\u00e4ynn\u00e4 v\u00e4hemm\u00e4n ehtoja (viesti toiselle kertaalle) ja pit\u00e4m\u00e4\u00e4n sen paljon paremmin j\u00e4rjestyksess\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>Meid\u00e4n pit\u00e4isi alkaa v\u00e4ltt\u00e4\u00e4 class_exists-elementtej\u00e4 suuressa osassa koodiamme t\u00e4ss\u00e4 vaiheessa (muutamia poikkeuksia lukuun ottamatta, jotka kerron my\u00f6hemmin).<\/p>\n","protected":false},"author":1,"featured_media":166297,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,843,864],"tags":[1166],"class_list":["post-229703","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229703","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=229703"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229703\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166297"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}