{"id":229284,"date":"2022-11-08T12:55:00","date_gmt":"2022-11-08T09:55:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229284"},"modified":"2022-11-09T06:17:46","modified_gmt":"2022-11-09T03:17:46","slug":"evitar-class_exists-en-el-codigo-de-wordpress-orientado-a-objetos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/evitar-class_exists-en-el-codigo-de-wordpress-orientado-a-objetos\/","title":{"rendered":"Evitar class_exists en el c\u00f3digo de WordPress orientado a objetos"},"content":{"rendered":"\n<p>Si escribe c\u00f3digo orientado a objetos para WordPress (generalmente dentro del contexto de los complementos), es probable que se encuentre con una verificaci\u00f3n class_exists antes de inicializar una clase. Pero deber\u00edamos comenzar a evitar class_exists en gran parte de nuestro c\u00f3digo en este punto (con algunas excepciones que describir\u00e9 a continuaci\u00f3n).<\/p>\n<p>Dependiendo de la versi\u00f3n de PHP que est\u00e9 usando, esto tiene sentido. O lo hizo en alg\u00fan momento. A partir de PHP 5.3.0, esto no es necesario. En cambio, es una mejor pr\u00e1ctica usar espacios de nombres.<\/p>\n<h2>Evitar class_exists<\/h2>\n<p>Puede ver todos los requisitos para varias versiones de WordPress en <a href=\"https:\/\/codex.wordpress.org\/Template:Server_requirements\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esta p\u00e1gina,<\/a> por lo que si est\u00e1 trabajando con versiones heredadas de WordPress, entonces la verificaci\u00f3n completa de class_exists podr\u00eda valer la pena.<\/p>\n<p>A\u00fan as\u00ed, <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hay una nota importante<\/a> :<\/p>\n<blockquote>\n<p>Nota: si se encuentra en un entorno heredado en el que solo tiene versiones anteriores de PHP o MySQL, WordPress tambi\u00e9n funciona con PHP 5.2.4+ y MySQL 5.0+, pero estas versiones han alcanzado el fin de vida oficial y, como tal, <strong>pueden exponer su sitio a vulnerabilidades de seguridad<\/strong>.<\/p>\n<\/blockquote>\n<p>Pero para la mayor\u00eda de nosotros, los entornos de alojamiento modernos admiten al menos PHP 5.3.0, si no superior, y por eso, no tenemos que usar class_exists.<\/p>\n<p>Dicho esto, no es raro ver algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-00-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esto<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (! class_exists( 'My_Unique_Class')) {\n class My_Unique_Class {\n   \/\/ class implementation\n }\n}\n<\/code><\/pre>\n<p>O <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-01-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (class_exists( 'My_Unique_Class')) {\n  return;\n}\n\nclass My_Unique_Class {\n   \/\/ class implementation\n}\n<\/code><\/pre>\n<p>Hace a\u00f1os, yo tambi\u00e9n escrib\u00eda c\u00f3digo como este. A veces era para interactuar con un c\u00f3digo base preexistente. Otras veces, fue porque no sab\u00eda nada mejor. La cuesti\u00f3n es que esto se ha convertido en algo que vemos en el c\u00f3digo basado en WordPress cuando no tenemos que usarlo.<\/p>\n<p>De hecho, dir\u00eda que no deber\u00edamos usarlo m\u00e1s.<\/p>\n<p>Pero cuanto m\u00e1s c\u00f3digo escribes y m\u00e1s c\u00f3digo lees, m\u00e1s aprendes, \u00bfverdad? Esa es parte de la raz\u00f3n de los espacios de nombres y la carga autom\u00e1tica.<\/p>\n<\/p>\n<p>Entonces, \u00bfc\u00f3mo se escribir\u00eda el c\u00f3digo anterior?<\/p>\n<p>Tal vez <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-02-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TomMcFarlin;\n\nclass My_Unique_Class {\n  \/\/ class implementation\n}\n<\/code><\/pre>\n<p>A\u00fan as\u00ed, esto plantea la pregunta para algunos: \u00bfC\u00f3mo ayudan los espacios de nombres en lugar de usar class_exists?<\/p>\n<p>Idealmente, si existe la misma clase dentro de un espacio de nombres, entonces hay un problema con el espacio de nombres. Recuerde que <a href=\"https:\/\/wordpress.mediadoma.com\/es\/espacios-de-nombres-y-carga-automatica-en-wordpress\/\" title=\"puede pensar en un espacio de nombres\">puede pensar en un espacio de nombres<\/a> como un paquete formado por piezas \u00fanicas. Y debido a que son \u00fanicos, nunca deber\u00eda haber otra pieza o, en esta clase, otra clase igual.<\/p>\n<p>Con ese fin, en lugar de usar comprobaciones class_exists, trate de usar espacios de nombres. Por supuesto, no estoy diciendo que regrese y refactorice todo su c\u00f3digo, no lo he hecho, pero eso no significa que el c\u00f3digo que escribo o reviso incluya el uso o recomendaciones para.<\/p>\n<p>Es un cambio f\u00e1cil que puede ser de gran ayuda para mantener el c\u00f3digo m\u00e1s f\u00e1cil de leer, lleno de menos condicionales (una publicaci\u00f3n para otro momento) y mantenerlo mucho m\u00e1s organizado.<\/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>Deber\u00edamos comenzar a evitar class_exists en gran parte de nuestro c\u00f3digo en este punto (con algunas excepciones que describir\u00e9 m\u00e1s adelante).<\/p>\n","protected":false},"author":1,"featured_media":166297,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,840,861],"tags":[1172],"class_list":["post-229284","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229284","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=229284"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229284\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/166297"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}