{"id":229824,"date":"2022-11-04T10:09:00","date_gmt":"2022-11-04T07:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229824"},"modified":"2022-11-09T16:32:24","modified_gmt":"2022-11-09T13:32:24","slug":"sui-valori-immutabili-nei-plugin-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/sui-valori-immutabili-nei-plugin-di-wordpress\/","title":{"rendered":"Sui valori immutabili nei plugin di WordPress"},"content":{"rendered":"\n<p>Se hai svolto un lavoro, o anche una lettura, sulla programmazione orientata agli oggetti, probabilmente ti sei imbattuto nell&#8217;idea di immutabilit\u00e0. Questa \u00e8 l&#8217;idea di qualcosa che non cambia.<\/p>\n<p>A volte puoi avere valori immutabili e talvolta puoi avere oggetti immutabili (almeno dopo che sono stati istanziati).<\/p>\n<p>L&#8217;opposto di immutabile (ma comunque era la mia tartaruga ninja preferita).<\/p>\n<p>Il fatto \u00e8 che pi\u00f9 lavoro con codice orientato agli oggetti, meno tendo a lavorare con variabili immutabili. Certo, user\u00f2 le costanti come definite in un file di configurazione, ma \u00e8 probabile che tu non mi trovi a memorizzare valori all&#8217;interno di una classe come <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>Questo probabilmente implica qualcosa su di me e sulle mie capacit\u00e0, ma \u00e8 vero. Per fortuna, <a href=\"https:\/\/tommcfarlin.com\/code-reviews\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le revisioni del codice<\/a> sono ottime per aiutarti a vedere opportunit\u00e0 su dove sfruttare strategie che normalmente non avresti. E questo \u00e8 il caso dei valori immutabili nei plugin di WordPress.<\/p>\n<p>Naturalmente, questa \u00e8 una di quelle cose che \u00e8 stata portata alla mia attenzione <a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">da un amico<\/a> durante la revisione del mio codice.<\/p>\n<p>Quando si lavora con WordPress, molti di noi hanno probabilmente familiarit\u00e0 con <strong>functions.php<\/strong> e <strong>wp-config.php<\/strong> e il ruolo che svolgono nell&#8217;applicazione principale di WordPress.<\/p>\n<p>S\u00ec, ci sono momenti in cui le cose appartengono a <strong>wp-config.php<\/strong>, e s\u00ec, ci sono volte in cui le cose appartengono a <strong>functions.php<\/strong>, ma a volte penso che quel particolare file sia abusato con troppe funzioni, valori e cos\u00ec via .<\/p>\n<p>Ma per quanto riguarda i plugin? In particolare, che dire dei plugin orientati agli oggetti? Ad esempio, supponiamo che tu stia lavorando con un&#8217;API che richiede una chiave API, quindi non ti imbatti in un limite di velocit\u00e0 particolare con una versione gratuita dell&#8217;applicazione.<\/p>\n<p>Di solito, potresti trovarmi a memorizzare il valore nella classe del plugin principale come una variabile di istanza che pu\u00f2 essere passata, o forse \u00e8 in una classe contenitore a cui posso fare riferimento e utilizzare il suo metodo <strong>get .<\/strong><\/p>\n<p>Ma che dire dell&#8217;utilizzo di una\u00a0 propriet\u00e0 <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const<\/a> in una classe e quindi del suo passaggio tramite iniezione setter?<\/p>\n<p>Ad esempio, supponiamo che esista una classe plug-in che si basa su una classe helper per eseguire il rendering di qualcosa sullo schermo. La chiave API pu\u00f2 essere definita in questa classe e quindi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d588e0c45cf96bcd5f10614ccf432339#file-00-main-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">passata all&#8217;helper quando necessario<\/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>Successivamente, la classe helper pu\u00f2 effettuare una chiamata all&#8217;API arbitraria (la chiamo Canvas poich\u00e9 ipoteticamente saremo qualcosa) utilizzando il suo URL e passa la chiave API come parte della stringa di query.<\/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>Per di qua:<\/p>\n<ul>\n<li>c&#8217;\u00e8 un unico posto in cui viene mantenuto il valore,<\/li>\n<li>c&#8217;\u00e8 un nome descrittivo che indica cosa memorizza,<\/li>\n<li>pu\u00f2 essere passato ad altre classi con dipendenza minima,<\/li>\n<li>le altre classi possono riferirsi ad esse come variabili locali o variabili di istanza (a seconda di come vengono passate).<\/li>\n<\/ul>\n<p>Certo, ci sono altri modi in cui questi valori possono essere mantenuti (di nuovo usando <strong>functions.php<\/strong> o qualcosa di simile).<\/p>\n<p>Ma se stai lavorando con la programmazione orientata agli oggetti e vuoi lavorare con valori immutabili in un plugin di WordPress, non avrebbe senso mantenerlo nel contesto delle classi che compongono il plugin?<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le revisioni del codice ti aiutano a vedere le opportunit\u00e0 in cui utilizzare le tecniche che potresti perdere. Questo \u00e8 il caso dei valori immutabili nei plugin di 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":[918,804,720,844,865],"tags":[1168],"class_list":["post-229824","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-php-6","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229824","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229824"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229824\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/166654"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229824"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229824"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}