{"id":228888,"date":"2022-11-04T09:57:00","date_gmt":"2022-11-04T06:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228888"},"modified":"2022-11-09T04:40:31","modified_gmt":"2022-11-09T01:40:31","slug":"o-niezmiennych-wartosciach-w-wtyczkach-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/o-niezmiennych-wartosciach-w-wtyczkach-wordpress\/","title":{"rendered":"O niezmiennych warto\u015bciach w wtyczkach WordPress"},"content":{"rendered":"\n<p>Je\u015bli wykona\u0142e\u015b jak\u0105kolwiek prac\u0119 \u2013 a nawet czyta\u0142e\u015b \u2013 na temat programowania obiektowego, to prawdopodobnie natkn\u0105\u0142e\u015b si\u0119 na ide\u0119 niezmienno\u015bci. To jest idea, \u017ce \u200b\u200bco\u015b jest niezmienne.<\/p>\n<p>Czasami mo\u017cesz mie\u0107 niezmienne warto\u015bci, a czasami mo\u017cesz mie\u0107 niezmienne obiekty (przynajmniej po ich wyst\u0105pieniu).<\/p>\n<p>Przeciwie\u0144stwo niezmienno\u015bci (ale i tak by\u0142 moim ulubionym \u017c\u00f3\u0142wiem ninja).<\/p>\n<p>Chodzi o to, \u017ce im wi\u0119cej pracuj\u0119 z kodem obiektowym, tym mniej pracuj\u0119 z niezmiennymi zmiennymi. Jasne, u\u017cyj\u0119 sta\u0142ych zdefiniowanych w pliku konfiguracyjnym, ale prawdopodobnie nie znajdziesz mnie przechowuj\u0105cego warto\u015bci w klasie jako <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>To prawdopodobnie sugeruje co\u015b o mnie i moich zdolno\u015bciach, ale to prawda. Na szcz\u0119\u015bcie <a href=\"https:\/\/tommcfarlin.com\/code-reviews\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">przegl\u0105dy kodu<\/a> \u015bwietnie pomagaj\u0105 dostrzec mo\u017cliwo\u015bci wykorzystania strategii, kt\u00f3rych normalnie nie by\u015b u\u017cy\u0142. I tak jest w przypadku niezmiennych warto\u015bci we wtyczkach WordPress.<\/p>\n<p>Oczywi\u015bcie jest to jedna z tych rzeczy, na kt\u00f3re zwr\u00f3ci\u0142 mi uwag\u0119 <a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">znajomy<\/a> podczas przegl\u0105dania mojego kodu.<\/p>\n<p>Podczas pracy z WordPressem wielu z nas prawdopodobnie zna <strong>functions.php<\/strong> i <strong>wp-config.php<\/strong> oraz rol\u0119, jak\u0105 odgrywaj\u0105 w podstawowej aplikacji WordPress.<\/p>\n<p>Tak, s\u0105 chwile, w kt\u00f3rych rzeczy nale\u017c\u0105 do <strong>wp-config.php<\/strong> i tak, s\u0105 chwile, w kt\u00f3rych rzeczy nale\u017c\u0105 do <strong>functions.php<\/strong>, ale czasami my\u015bl\u0119, \u017ce dany plik jest nadu\u017cywany za pomoc\u0105 zbyt wielu funkcji, warto\u015bci i tak dalej .<\/p>\n<p>Ale co z wtyczkami? A konkretnie, co z wtyczkami obiektowymi? Na przyk\u0142ad za\u0142\u00f3\u017cmy, \u017ce pracujesz z interfejsem API, kt\u00f3ry wymaga klucza interfejsu API, wi\u0119c nie przekroczysz okre\u015blonego limitu szybko\u015bci w bezp\u0142atnej wersji aplikacji.<\/p>\n<p>Zwykle mo\u017cesz znale\u017a\u0107 mnie przechowuj\u0105cego warto\u015b\u0107 w g\u0142\u00f3wnej klasie wtyczki jako zmienn\u0105 instancji, kt\u00f3ra mo\u017ce by\u0107 przekazywana, lub mo\u017ce jest to klasa kontenera, do kt\u00f3rej mog\u0119 si\u0119 odnie\u015b\u0107 i u\u017cy\u0107 jej metody <strong>get .<\/strong><\/p>\n<p>Ale co z u\u017cywaniem\u00a0 w\u0142a\u015bciwo\u015bci <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const<\/a> w klasie, a nast\u0119pnie przekazywaniem jej przez wstrzykiwanie setter?<\/p>\n<p>Za\u0142\u00f3\u017cmy na przyk\u0142ad, \u017ce istnieje klasa wtyczki, kt\u00f3ra polega na klasie pomocniczej do renderowania czego\u015b na ekranie. Klucz API mo\u017cna zdefiniowa\u0107 w tej klasie, a nast\u0119pnie <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d588e0c45cf96bcd5f10614ccf432339#file-00-main-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">w razie potrzeby przekaza\u0107 do helpera<\/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>Nast\u0119pnie klasa pomocnicza mo\u017ce wywo\u0142a\u0107 dowolny interfejs API (nazywam go Canvas, poniewa\u017c hipotetycznie b\u0119dziemy czym\u015b), u\u017cywaj\u0105c swojego adresu URL i przekazuje klucz API jako cz\u0119\u015b\u0107 ci\u0105gu zapytania.<\/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\u0105 drog\u0105:<\/p>\n<ul>\n<li>jest jedno miejsce, w kt\u00f3rym przechowywana jest warto\u015b\u0107,<\/li>\n<li>jest opisowa nazwa wskazuj\u0105ca, co przechowuje,<\/li>\n<li>mo\u017cna go przekaza\u0107 do innych klas z minimaln\u0105 zale\u017cno\u015bci\u0105,<\/li>\n<li>inne klasy mog\u0105 odwo\u0142ywa\u0107 si\u0119 do nich jako zmienne lokalne lub zmienne instancji (w zale\u017cno\u015bci od tego, jak s\u0105 przekazywane).<\/li>\n<\/ul>\n<p>Jasne, s\u0105 inne sposoby przechowywania tych warto\u015bci (ponownie przy u\u017cyciu <strong>functions.php<\/strong> lub czego\u015b podobnego).<\/p>\n<p>Ale je\u015bli pracujesz z programowaniem obiektowym i chcesz pracowa\u0107 z niezmiennymi warto\u015bciami we wtyczce WordPress, czy nie ma sensu trzyma\u0107 tego w kontek\u015bcie klas, kt\u00f3re tworz\u0105 wtyczk\u0119?<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Przegl\u0105dy kodu pomagaj\u0105 dostrzec mo\u017cliwo\u015bci wykorzystania technik, kt\u00f3rych mo\u017cesz przegapi\u0107. Tak jest w przypadku niezmiennych warto\u015bci we wtyczkach WordPress.<\/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":[721,919,805,845,866],"tags":[1169],"class_list":["post-228888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-php-7","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228888"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228888\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/166654"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}