{"id":229307,"date":"2022-11-08T18:23:00","date_gmt":"2022-11-08T15:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229307"},"modified":"2022-11-09T06:24:35","modified_gmt":"2022-11-09T03:24:35","slug":"estandares-basicos-de-codificacion-a-traves-de-psr-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/estandares-basicos-de-codificacion-a-traves-de-psr-1\/","title":{"rendered":"Est\u00e1ndares b\u00e1sicos de codificaci\u00f3n a trav\u00e9s de PSR-1"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/es\/uso-de-los-psr-frente-a-los-estandares-de-codificacion-de-wordpress\/\" title=\"Ayer\" >Ayer<\/a>, habl\u00e9 brevemente sobre la justificaci\u00f3n del uso de <a href=\"http:\/\/www.php-fig.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR<\/a> en comparaci\u00f3n con los <a href=\"https:\/\/codex.wordpress.org\/WordPress_Coding_Standards\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">est\u00e1ndares de codificaci\u00f3n de WordPress<\/a> y el cu\u00e1ndo y el por qu\u00e9 de ambos. Pero eso no significa que no est\u00e9 libre de puntos de confusi\u00f3n, especialmente si reci\u00e9n est\u00e1s comenzando con ellos, \u00bfverdad?<\/p>\n<p>Con eso quiero decir: supongamos que ha estado trabajando con los est\u00e1ndares de codificaci\u00f3n de WordPress durante a\u00f1os (porque puedo relacionarme) y ahora hay un conjunto completamente nuevo de reglas y pautas a seguir. Pero no es una simple cuesti\u00f3n de cambiar algunos espacios en blanco y cambiar el nombre de los archivos.<\/p>\n<p>Hay otros puntos a seguir, y cada uno se describe en un n\u00famero, literalmente (PSR-1, PSR-2, etc.), de c\u00f3mo deber\u00eda funcionar algo.<\/p>\n<p>Entonces, cuando se trata solo de los est\u00e1ndares de codificaci\u00f3n b\u00e1sicos como se describe en PSR-1, \u00bfcu\u00e1les son algunas \u00e1reas problem\u00e1ticas que podemos encontrar como desarrolladores de WordPress?<\/p>\n<h2>Est\u00e1ndares b\u00e1sicos de codificaci\u00f3n (y efectos secundarios)<\/h2>\n<p>No tengo planes de revisar cada uno de los documentos y repetir lo que ya podemos aprender simplemente <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ley\u00e9ndolos<\/a>, pero creo que hay algo que decir para tomar algo que muchos de nosotros hacemos o experimentamos y ver c\u00f3mo esto podr\u00eda cambiar dentro de el contexto de WordPress.<\/p>\n<p>Tome <strong>los efectos secundarios<\/strong> del est\u00e1ndar de codificaci\u00f3n b\u00e1sica (o <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> ), por ejemplo:<\/p>\n<blockquote>\n<p>Un archivo DEBER\u00cdA declarar nuevos s\u00edmbolos (clases, funciones, constantes, etc.) y no causar otros efectos secundarios, o DEBER\u00cdA ejecutar l\u00f3gica con efectos secundarios, pero NO DEBER\u00cdA hacer ambas cosas.<\/p>\n<p>La frase &quot;efectos secundarios&quot; significa la ejecuci\u00f3n de l\u00f3gica que no est\u00e1 directamente relacionada con la declaraci\u00f3n de clases, funciones, constantes, etc., simplemente por incluir el archivo.<\/p>\n<\/blockquote>\n<p>Personalmente, considero que la segunda frase es la clave para comprender y evitar los efectos secundarios en nuestro c\u00f3digo tanto como sea posible. Es decir, cualquier cosa que hagan nuestras clases debe ser autosuficiente o ser cohesivo con algo que pueda haber sido inyectado de alguna manera.<\/p>\n<p>De todos modos, encontrar un c\u00f3digo que introduzca un efecto secundario y limpiarlo no deber\u00eda ser demasiado dif\u00edcil. De hecho, me usar\u00e9 a m\u00ed mismo como ejemplo.<\/p>\n<p>Mira este <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-00-toggle-admin-notices-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fragmento de c\u00f3digo<\/a> en particular :<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once( 'admin\/class-toggle-admin-notices-node.php' );\ninclude_once( 'admin\/interfaces\/interface-asset.php' );\ninclude_once( 'admin\/class-javascript-assets.php' );\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>Este c\u00f3digo proviene directamente de <a href=\"https:\/\/tommcfarlin.com\/wordpress-admin-notices\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Toggle Admin Notices<\/a>. De acuerdo, es simple, y el <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repositorio<\/a> muestra una nota de c\u00f3mo cambiarlo. Sin embargo, demuestra el punto, \u00bfverdad?<\/p>\n<p>\u00bfCual es la soluci\u00f3n? Esto viene en forma de carga autom\u00e1tica (que tambi\u00e9n se cubre en <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> ). Entonces, \u00bfqu\u00e9 pasar\u00eda si tuviera que refactorizarlo para que siguiera correctamente a PSR-1? Entonces, una forma de refactorizarlo puede <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-01-toggle-admin-notices-autoloading-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">verse as\u00ed<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once 'inc\/autoload.php';\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>\u00bfEs este un gran ejemplo? Probablemente no. Pero hay m\u00e1s que solo incluir archivos. Incluir esos archivos es hacer que este \u00fanico archivo presente una variedad de efectos secundarios.<\/p>\n<p>Eso significa que este \u00fanico archivo es responsable de hacer mucho m\u00e1s que solo esas cuatro l\u00edneas de c\u00f3digo. Piense en ello como si incorporara todo lo que implementan otros archivos. Se vuelve m\u00e1s complejo en ese punto.<\/p>\n<p>Entonces tome esa idea y mu\u00e9vala a un sistema mucho m\u00e1s grande y podr\u00e1 ver c\u00f3mo y por qu\u00e9 esto ser\u00eda problem\u00e1tico.<\/p>\n<p>Por supuesto, tambi\u00e9n hay formas alternativas. Y este es s\u00f3lo un ejemplo. Autocr\u00edtico, tambi\u00e9n. El punto no es tanto mostrar una forma definitiva de hacer esto, sino comenzar a sembrar ideas sobre c\u00f3mo dise\u00f1amos, planificamos, construimos e incorporamos clases.<\/p>\n<h3>\u00bfQu\u00e9 pasa con las vistas?<\/h3>\n<p>Cuando se trata de escribir complementos, soy partidario de tratar lo que los usuarios ver\u00e1n como <strong>vistas.\u00a0<\/strong>Pero parece haber una trampa aqu\u00ed: se considera una mala pr\u00e1ctica incluir archivos, ya que presenta efectos secundarios.<\/p>\n<p>Por lo tanto, no queremos generar l\u00f3gica en nuestras clases, pero tambi\u00e9n queremos separar la presentaci\u00f3n de la l\u00f3gica comercial.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166223-61e7906a0bf19.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166223-61e7906a0bf19.png\" alt=\"Est\u00e1ndares b\u00e1sicos de codificaci\u00f3n a trav\u00e9s de PSR-1\" ><\/a><\/p>\n<p>Qu\u00e9 vamos a hacer?<\/p>\n<blockquote>\n<p>El giro&#8230; es que vamos a utilizar la programaci\u00f3n orientada a objetos para hacerlo. Dise\u00f1aremos una clase que genere HTML utilizando una plantilla de PHP.<\/p>\n<\/blockquote>\n<p>Esto ha sido cubierto en profundidad <a href=\"https:\/\/carlalexander.ca\/designing-class-generate-wordpress-html-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">por otra persona<\/a>, y recomiendo leer esa publicaci\u00f3n en particular para tomar la idea de los efectos secundarios, evit\u00e1ndolos e incorporando pr\u00e1cticas s\u00f3lidas tanto como sea posible.<\/p>\n<h2>\u2026\u00bfY Activos y Archivos Relacionados?<\/h2>\n<p>Lo s\u00e9: la idea de alejarse de los efectos secundarios (y mucho menos identificarlos) puede ser extra\u00f1a al principio, especialmente cuando piensas en ciertas cosas que hemos hecho durante tanto tiempo.<\/p>\n<p>Y puede generar preguntas como: \u00bfEst\u00e1 mal incluir archivos JavaScript o archivos CSS? Eso es probablemente un tema para una publicaci\u00f3n diferente. Recuerde, sin embargo, que hay funciones API b\u00e1sicas directamente relacionadas con eso, y pueden ser parte de una clase estrictamente responsable de hacerlo.<\/p>\n<p>Si el prop\u00f3sito de una clase es hacer exactamente eso y solo eso y usa funciones API para hacerlo, entonces dir\u00eda que probablemente est\u00e9 bien.<\/p>\n<p>Pero me estoy desviando de eso por ahora (y tal vez sea un tema para los comentarios o, de nuevo, otra publicaci\u00f3n).<\/p>\n<p>En su lugar, mantenga sus clases sencillas y con un prop\u00f3sito. Deben hacer lo que dice <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> y evitar hacer cosas como &quot;[declarar] nuevas clases, funciones, constantes, etc.&quot; y \u00ab[ejecutar] l\u00f3gica con efectos secundarios&quot;.<\/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>Mantenga sus clases con un prop\u00f3sito. Evite cosas como \u00ab[declarar] nuevas clases, funciones, constantes, etc.\u00bb y \u201c[ejecutar] l\u00f3gica con efectos secundarios\u201d.<\/p>\n","protected":false},"author":1,"featured_media":166224,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716],"tags":[1172],"class_list":["post-229307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229307","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=229307"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229307\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/166224"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}