{"id":229162,"date":"2022-11-04T10:41:00","date_gmt":"2022-11-04T07:41:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229162"},"modified":"2022-11-09T05:47:06","modified_gmt":"2022-11-09T02:47:06","slug":"sobre-los-valores-inmutables-en-los-complementos-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/sobre-los-valores-inmutables-en-los-complementos-de-wordpress\/","title":{"rendered":"Sobre los valores inmutables en los complementos de WordPress"},"content":{"rendered":"\n<p>Si ha realizado alg\u00fan trabajo, o incluso alguna lectura, sobre la programaci\u00f3n orientada a objetos, es probable que se haya topado con la idea de la inmutabilidad. Esa es la idea de que algo no cambia.<\/p>\n<p>A veces puede tener valores inmutables y, a veces, puede tener objetos inmutables (al menos despu\u00e9s de que se instancian).<\/p>\n<p>Lo opuesto a inmutable (pero \u00e9l era mi tortuga ninja favorita, de todos modos).<\/p>\n<p>La cuesti\u00f3n es que cuanto m\u00e1s trabajo con c\u00f3digo orientado a objetos, menos tiendo a trabajar con variables inmutables. Claro, usar\u00e9 constantes como se definen en un archivo de configuraci\u00f3n, pero no es probable que me encuentres almacenando valores dentro de una clase como <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>Eso probablemente implica algo sobre m\u00ed y mis habilidades, pero es verdad. Afortunadamente, las <a href=\"https:\/\/tommcfarlin.com\/code-reviews\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">revisiones de c\u00f3digo<\/a> son excelentes para ayudarlo a ver oportunidades sobre d\u00f3nde aprovechar estrategias que normalmente no har\u00eda. Y tal es el caso de los valores inmutables en los complementos de WordPress.<\/p>\n<p><a href=\"https:\/\/twitter.com\/tobyschrapel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Por supuesto, esta es una de esas cosas que un amigo<\/a> me llam\u00f3 la atenci\u00f3n al revisar mi c\u00f3digo.<\/p>\n<p>Cuando trabajamos con WordPress, es probable que muchos de nosotros estemos familiarizados con <strong>functions.php<\/strong> y <strong>wp-config.php<\/strong> y el papel que desempe\u00f1an en la aplicaci\u00f3n principal de WordPress.<\/p>\n<p>S\u00ed, hay momentos en los que las cosas pertenecen a <strong>wp-config.php<\/strong>, y s\u00ed, hay momentos en los que las cosas pertenecen a <strong>functions.php<\/strong>, pero a veces creo que se abusa de ese archivo en particular con demasiadas funciones, valores, etc. .<\/p>\n<p>Pero, \u00bfqu\u00e9 pasa con los complementos? Espec\u00edficamente, \u00bfqu\u00e9 pasa con los complementos orientados a objetos? Por ejemplo, supongamos que est\u00e1 trabajando con una API que requiere una clave de API, por lo que no se encuentra con un l\u00edmite de velocidad particular con una versi\u00f3n gratuita de la aplicaci\u00f3n.<\/p>\n<p>Por lo general, es posible que me encuentre almacenando el valor en la clase de complemento principal como una variable de instancia que se puede pasar, o tal vez est\u00e9 en una clase de contenedor a la que puedo referirme y usar su m\u00e9todo de <strong>obtenci\u00f3n .<\/strong><\/p>\n<p>Pero, \u00bfqu\u00e9 pasa con el uso de una\u00a0 propiedad <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.constants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">const<\/a> en una clase y luego pasarla a trav\u00e9s de una inyecci\u00f3n de setter?<\/p>\n<p>Por ejemplo, supongamos que hay una clase de complemento que se basa en una clase auxiliar para representar algo en la pantalla. La clave API se puede definir en esta clase y luego <a href=\"https:\/\/gist.github.com\/tommcfarlin\/d588e0c45cf96bcd5f10614ccf432339#file-00-main-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pasar al asistente cuando sea necesario<\/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>A continuaci\u00f3n, la clase de ayuda puede realizar una llamada a la API arbitraria (lo llamo Canvas ya que hipot\u00e9ticamente seremos algo) utilizando su URL y pasa la clave API como parte de la cadena de consulta.<\/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>De esta manera:<\/p>\n<ul>\n<li>hay un solo lugar en el que se guarda el valor,<\/li>\n<li>hay un nombre descriptivo que indica lo que almacena,<\/li>\n<li>se puede pasar a otras clases con una dependencia m\u00ednima,<\/li>\n<li>las otras clases pueden referirse a ellas como variables locales o como variables de instancia (dependiendo de c\u00f3mo se transmitan).<\/li>\n<\/ul>\n<p>Claro, hay otras formas en las que se pueden mantener estos valores (nuevamente con el uso de <strong>functions.php<\/strong> o algo similar).<\/p>\n<p>Pero si est\u00e1 trabajando con programaci\u00f3n orientada a objetos y desea trabajar con valores inmutables en un complemento de WordPress, \u00bfno tendr\u00eda sentido mantenerlo en el contexto de las clases que componen el complemento?<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Las revisiones de c\u00f3digo lo ayudan a ver oportunidades donde usar t\u00e9cnicas que puede perder. Tal es el caso de los valores inmutables en los complementos de 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":[716,914,800,840,861],"tags":[1172],"class_list":["post-229162","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-otro","category-php-2","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229162"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229162\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/166654"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}