{"id":231416,"date":"2022-12-29T18:24:00","date_gmt":"2022-12-29T15:24:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231416"},"modified":"2022-12-29T18:28:15","modified_gmt":"2022-12-29T15:28:15","slug":"escribir-mejor-codigo-de-wordpress-phpstan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/escribir-mejor-codigo-de-wordpress-phpstan\/","title":{"rendered":"Escribir mejor c\u00f3digo de WordPress: PHPStan"},"content":{"rendered":"\n<p>En la publicaci\u00f3n m\u00e1s reciente de esta serie (que ciertamente es de hace alg\u00fan tiempo), habl\u00e9 extensamente sobre <a href=\"https:\/\/wordpress.mediadoma.com\/es\/herramientas-para-escribir-mejor-codigo-de-wordpress-composer\/\" title=\"Composer\">Composer<\/a> y <a href=\"https:\/\/wordpress.mediadoma.com\/es\/mejor-codigo-de-wordpress-el-archivo-de-bloqueo-del-compositor\/\" title=\"su archivo de bloqueo.\">su archivo de bloqueo.<\/a><\/p>\n<p>Recomiendo leer los dos art\u00edculos anteriores porque Composer eventualmente jugar\u00e1 un papel en este material que esta y futuras publicaciones compartir\u00e1n. Pero si opta por no ponerse al d\u00eda con ellos (o ya est\u00e1 familiarizado con Composer), la esencia de las publicaciones anteriores es, respectivamente, la siguiente:<\/p>\n<blockquote>\n<p>No recomiendo consultar el directorio de proveedores en su repositorio. Eso puede convertirse en un directorio enorme m\u00e1s tarde y puede socavar el prop\u00f3sito completo de Composer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/es\/herramientas-para-escribir-mejor-codigo-de-wordpress-composer\/\" title=\"Compositor\">Compositor<\/a><\/p>\n<p>El objetivo es asegurarse de que todos ejecuten la misma versi\u00f3n de las dependencias del proyecto, no versiones anteriores, ni versiones m\u00e1s nuevas, sino la misma versi\u00f3n.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/es\/mejor-codigo-de-wordpress-el-archivo-de-bloqueo-del-compositor\/\" title=\"El archivo de bloqueo del compositor\">El archivo de bloqueo del compositor<\/a><\/p>\n<\/blockquote>\n<p>Dicho esto, existen numerosas dependencias o paquetes que podemos instalar que nos ayudan a asegurarnos de que estamos escribiendo c\u00f3digo de la mejor calidad posible.<\/p>\n<p>Claro, algunos de estos pueden tener la forma de algo as\u00ed como est\u00e1ndares de codificaci\u00f3n, pero en realidad son m\u00e1s reglas que elementos para escribir c\u00f3digo de alta calidad (aunque no creo que deban dejarse fuera de la discusi\u00f3n, simplemente omitidos). en este momento \ud83d\ude43).<\/p>\n<p>Volviendo a las herramientas en cuesti\u00f3n: \u00bfCu\u00e1les son algunas herramientas que ayudan a escribir c\u00f3digo de WordPress de alta calidad? Voy a compartir algunos de mis favoritos y voy a hablar sobre c\u00f3mo podemos ejecutarlos todos contra una base de c\u00f3digo.<\/p>\n<p>Primero, echemos un vistazo al an\u00e1lisis est\u00e1tico con <a href=\"https:\/\/github.com\/phpstan\/phpstan\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPStan<\/a>.<\/p>\n<h2>Mejor c\u00f3digo de WordPress con PHPStan<\/h2>\n<h3>\u00bfQu\u00e9 es el an\u00e1lisis est\u00e1tico, de todos modos?<\/h3>\n<p>Primero, unas pocas palabras sobre el an\u00e1lisis est\u00e1tico. Es decir, \u00bfqu\u00e9 es? Es un bocado, por un lado:<\/p>\n<blockquote>\n<p>El an\u00e1lisis de c\u00f3digo est\u00e1tico (tambi\u00e9n conocido como an\u00e1lisis de c\u00f3digo fuente) generalmente se realiza como parte de una revisi\u00f3n de c\u00f3digo (tambi\u00e9n conocida como prueba de caja blanca) y se lleva a cabo en la fase de implementaci\u00f3n de un ciclo de vida de desarrollo de seguridad (SDL).<\/p>\n<p>El an\u00e1lisis de c\u00f3digo est\u00e1tico com\u00fanmente se refiere a la ejecuci\u00f3n de herramientas de an\u00e1lisis de c\u00f3digo est\u00e1tico que intentan resaltar posibles vulnerabilidades dentro del c\u00f3digo fuente &#8216;est\u00e1tico&#8217; (no en ejecuci\u00f3n) mediante el uso de t\u00e9cnicas como el an\u00e1lisis de corrupci\u00f3n y el an\u00e1lisis de flujo de datos.<\/p>\n<p><a href=\"https:\/\/www.owasp.org\/index.php\/Static_Code_Analysis\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">An\u00e1lisis de c\u00f3digo est\u00e1tico a trav\u00e9s de OWASP<\/a><\/p>\n<\/blockquote>\n<p>Pi\u00e9nsalo de esta manera: es una forma de analizar un programa en busca de posibles errores que quiz\u00e1s no veas cuando trabajes en el c\u00f3digo base.<\/p>\n<p>Es decir, hay problemas, errores, problemas de seguridad, que pueden estar presentes pero que no puede detectar por varias razones (la menor de las cuales es que est\u00e1 demasiado cerca del c\u00f3digo).<\/p>\n<p>Sin embargo, con el tiempo, la comunidad de desarrollo ha aprendido formas de analizar c\u00f3digo, generar conjuntos de reglas y crear herramientas para ayudar a encontrar exactamente todo lo anterior.<\/p>\n<h3>An\u00e1lisis est\u00e1tico de c\u00f3digo centrado en WordPress<\/h3>\n<p>Y aqu\u00ed es donde entra en juego PHPStan.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159518-61e6f6b3d2b7f.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-159518-61e6f6b3d2b7f.png\" alt=\"Escribir mejor c\u00f3digo de WordPress: PHPStan\"><\/a><\/p>\n<p>Como se mencion\u00f3, el objetivo del paquete es identificar errores o fallas que existen en su c\u00f3digo antes de que alguien que no sea un desarrollador lo use, resaltarlos y brindarle la oportunidad de corregirlos.<\/p>\n<p>Debido a que herramientas como esta examinan una base de c\u00f3digo (en lugar de ejecutar el c\u00f3digo), no siempre es posible obtener una imagen clara. Esto significa que podemos obtener falsos positivos.<\/p>\n<p>Sin embargo, m\u00e1s sobre esto en un momento.<\/p>\n<p>Si est\u00e1 interesado en comenzar a ejecutar PHPStan en su base de c\u00f3digo, es f\u00e1cil. Despu\u00e9s de instalarlo, solo recuerde configurarlo para que no busque en el <code>vendor<\/code>directorio o, digamos, en el n\u00facleo de WordPress.<\/p>\n<p>En su lugar, haga que examine su c\u00f3digo.<\/p>\n<h3>Instalando PHPStan<\/h3>\n<p>Primero, en su <code>composer.json<\/code>archivo, agregue la siguiente l\u00ednea en la <code>require-dev<\/code>secci\u00f3n:<\/p>\n<p><code>\"phpstan\/phpstan\": \"^0.11.12\"<\/code><\/p>\n<p>Luego ejecuta <code>composer update<\/code>en tu terminal.<\/p>\n<p>Una vez instalado, puede ejecutarlo en un archivo individual, un directorio o un conjunto de directorios. Si ha le\u00eddo mis publicaciones anteriores sobre la organizaci\u00f3n del c\u00f3digo, entonces sabe que soy fan\u00e1tico de mantener la mayor\u00eda del c\u00f3digo fuente del proyecto <code>src<\/code>, puede ejecutar algo como esto:<\/p>\n<p><code>$ vendor\/bin\/phpstan analyse src<\/code><\/p>\n<p>Esto generar\u00e1 una salida basada en lo que encuentre la utilidad.<\/p>\n<p>\u00bfRecuerdas antes cuando dije que puede encontrar cosas como falsos positivos? Aqu\u00ed hay un resumen m\u00e1s detallado de lo que puede ver:<\/p>\n<ul>\n<li>Argumentos adicionales pasados \u200b\u200ba funciones (por ejemplo, la funci\u00f3n requiere dos argumentos, el c\u00f3digo pasa tres)<\/li>\n<li>Se pasan argumentos adicionales a las funciones print\/sprintf (por ejemplo, la cadena de formato contiene un marcador de posici\u00f3n, el c\u00f3digo pasa dos valores para reemplazar)<\/li>\n<li>Errores obvios en c\u00f3digo muerto<\/li>\n<li>Comportamiento m\u00e1gico que necesita ser definido.<\/li>\n<\/ul>\n<p>Todo lo anterior directamente desde el <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repositorio<\/a>.<\/p>\n<p>Aqu\u00ed es donde los <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12#rule-levels\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">niveles de regla<\/a> pueden marcar la diferencia, aunque es posible que se requieran algunos ajustes para llegar al nivel adecuado para su equipo o su proyecto.<\/p>\n<h3>\u00bfQu\u00e9 pasa con el an\u00e1lisis para WordPress?<\/h3>\n<p>Viktor Sz\u00e9pe comparti\u00f3 <a href=\"https:\/\/packagist.org\/packages\/szepeviktor\/phpstan-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">este recurso<\/a> conmigo (algo de su autor\u00eda, en realidad) y creo que es algo relevante y \u00fatil. La idea del paquete es simple:<\/p>\n<blockquote>\n<p>Resuelve todos los problemas que tuve durante el an\u00e1lisis del c\u00f3digo para WordPress.<\/p>\n<\/blockquote>\n<p>No est\u00e1 mal, \u00bfverdad?<\/p>\n<h2>Analiza tu c\u00f3digo<\/h2>\n<p>Independientemente de su proyecto, la organizaci\u00f3n de su c\u00f3digo o el nivel en el que ejecuta esta utilidad en particular, el objetivo siempre es mejorar el nivel de calidad del c\u00f3digo de WordPress que estamos escribiendo.<\/p>\n<p>Instalar esto como un paquete de Composer y luego ejecutarlo en su <code>src<\/code>directorio es un paso en la direcci\u00f3n correcta.<\/p>\n<p>Como se indic\u00f3 anteriormente, voy a compartir algunas otras herramientas y luego compartir\u00e9 c\u00f3mo ejecutarlas todas contra una base de c\u00f3digo antes de enviar el c\u00f3digo a un repositorio.<\/p>\n<h3>Nota<\/h3>\n<p>Si tiene alg\u00fan problema al intentar configurar el paquete, <a href=\"https:\/\/davemackey.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dave Mackey<\/a> me contact\u00f3 con un problema similar y su <a href=\"https:\/\/github.com\/szepeviktor\/phpstan-wordpress\/issues\/8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">soluci\u00f3n<\/a>.<\/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>Volviendo a las herramientas en cuesti\u00f3n: \u00bfCu\u00e1les son algunas herramientas que ayudan a escribir c\u00f3digo de WordPress de alta calidad? Comencemos con PHPStan.<\/p>\n","protected":false},"author":1,"featured_media":236988,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,747,800,779,840],"tags":[1172],"class_list":["post-231416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-php-2","category-software-de-codigo-abierto","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231416","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=231416"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231416\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/236988"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}