{"id":228874,"date":"2022-11-04T09:53:00","date_gmt":"2022-11-04T06:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228874"},"modified":"2022-11-09T04:36:50","modified_gmt":"2022-11-09T01:36:50","slug":"om-ofoeraenderliga-vaerden-i-wordpress-plugins","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/om-ofoeraenderliga-vaerden-i-wordpress-plugins\/","title":{"rendered":"Om of\u00f6r\u00e4nderliga v\u00e4rden i WordPress-plugins"},"content":{"rendered":"\n<p>Om du har gjort n\u00e5got arbete \u2013 eller till och med n\u00e5gon l\u00e4sning \u2013 med objektorienterad programmering, d\u00e5 har du f\u00f6rmodligen st\u00f6tt p\u00e5 id\u00e9n om of\u00f6r\u00e4nderlighet. Det \u00e4r tanken p\u00e5 att n\u00e5got \u00e4r of\u00f6r\u00e4nderligt.<\/p>\n<p>Ibland kan du ha of\u00f6r\u00e4nderliga v\u00e4rden, och ibland kan du ha of\u00f6r\u00e4nderliga objekt (\u00e5tminstone efter att de instansierats).<\/p>\n<p>Motsatsen till of\u00f6r\u00e4nderlig (men han var min favoritninjask\u00f6ldpadda i alla fall).<\/p>\n<p>Saken \u00e4r den att ju mer jag arbetar med objektorienterad kod, desto mindre tenderar jag att arbeta med of\u00f6r\u00e4nderliga variabler. Visst, jag kommer att anv\u00e4nda konstanter som definierats i en konfigurationsfil, men det \u00e4r inte troligt att du kommer att hitta mig som lagrar v\u00e4rden inom en klass som en <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>Det antyder f\u00f6rmodligen n\u00e5got om mig och mina f\u00f6rm\u00e5gor, men det \u00e4r sant. Tack och lov \u00e4r <a href=\"https:\/\/tommcfarlin.com\/code-reviews\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kodrecensioner<\/a> bra f\u00f6r att hj\u00e4lpa dig se m\u00f6jligheter om var du kan utnyttja strategier som du normalt inte skulle g\u00f6ra. Och s\u00e5 \u00e4r fallet med of\u00f6r\u00e4nderliga v\u00e4rden i WordPress-plugins.<\/p>\n<p>Naturligtvis \u00e4r detta en av de saker som uppm\u00e4rksammades <a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">av en v\u00e4n<\/a> n\u00e4r jag granskade min kod.<\/p>\n<p>N\u00e4r vi arbetar med WordPress \u00e4r m\u00e5nga av oss sannolikt bekanta med <strong>functions.php<\/strong> och <strong>wp-config.php<\/strong> och den roll de spelar i WordPress-applikationen.<\/p>\n<p>Ja, det finns tillf\u00e4llen d\u00e5 saker h\u00f6r hemma i <strong>wp-config.php<\/strong>, och ja, det finns tillf\u00e4llen d\u00e5 saker h\u00f6r hemma i <strong>functions.php<\/strong>, men ibland tycker jag att just den filen missbrukas med alldeles f\u00f6r m\u00e5nga funktioner, v\u00e4rden och s\u00e5 vidare .<\/p>\n<p>Men hur \u00e4r det med plugins? Specifikt, hur \u00e4r det med objektorienterade plugins? Som exempel kan du s\u00e4ga att du arbetar med ett API som kr\u00e4ver en API-nyckel, s\u00e5 att du inte st\u00f6ter p\u00e5 en viss hastighetsgr\u00e4ns med en gratisversion av applikationen.<\/p>\n<p>Vanligtvis kanske du hittar mig som lagrar v\u00e4rdet i huvudpluginklassen som en instansvariabel som kan skickas runt, eller s\u00e5 \u00e4r det kanske i en containerklass som jag kan referera till och anv\u00e4nda dess <strong>get<\/strong> &#8211; metod.<\/p>\n<p>Men vad s\u00e4gs om att anv\u00e4nda en <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const-<\/a> egenskap i en klass och sedan skicka runt den via setter-injektion?<\/p>\n<p>L\u00e5t oss till exempel s\u00e4ga att det finns en plugin-klass som f\u00f6rlitar sig p\u00e5 en hj\u00e4lpklass f\u00f6r att rendera n\u00e5got p\u00e5 sk\u00e4rmen. API-nyckeln kan definieras i den h\u00e4r klassen och sedan <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d588e0c45cf96bcd5f10614ccf432339#file-00-main-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">skickas till hj\u00e4lparen n\u00e4r det beh\u00f6vs<\/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>D\u00e4refter kan hj\u00e4lparklassen g\u00f6ra ett anrop till det godtyckliga API:et (jag kallar det Canvas eftersom vi hypotetiskt \u00e4r n\u00e5got) med sin URL och skickar API-nyckeln som en del av fr\u00e5gestr\u00e4ngen.<\/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>Den h\u00e4r v\u00e4gen:<\/p>\n<ul>\n<li>det finns en enda plats d\u00e4r v\u00e4rdet h\u00e5lls,<\/li>\n<li>det finns ett beskrivande namn som indikerar vad den lagrar,<\/li>\n<li>det kan \u00f6verf\u00f6ras till andra klasser med minimalt beroende,<\/li>\n<li>de andra klasserna kan referera till dem som lokala variabler eller som instansvariabler (beroende p\u00e5 hur de skickas runt).<\/li>\n<\/ul>\n<p>Visst, det finns andra s\u00e4tt p\u00e5 vilka dessa v\u00e4rden kan beh\u00e5llas (igen med hj\u00e4lp av <strong>functions.php<\/strong> eller n\u00e5got liknande).<\/p>\n<p>Men om du arbetar med objektorienterad programmering och du vill arbeta med of\u00f6r\u00e4nderliga v\u00e4rden i ett WordPress-plugin, vore det inte klokt att beh\u00e5lla det i sammanhanget med klasserna som utg\u00f6r plugin-programmet?<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kodrecensioner hj\u00e4lper dig att se m\u00f6jligheter d\u00e4r du kan anv\u00e4nda tekniker som du kan missa. S\u00e5 \u00e4r fallet med of\u00f6r\u00e4nderliga v\u00e4rden i WordPress-plugins.<\/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":[848,922,807,724,868],"tags":[1173],"class_list":["post-228874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-oevrig","category-php-9","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228874"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228874\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/166654"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}