{"id":229719,"date":"2022-11-08T17:58:00","date_gmt":"2022-11-08T14:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229719"},"modified":"2022-11-09T16:05:03","modified_gmt":"2022-11-09T13:05:03","slug":"padroes-basicos-de-codificacao-via-psr-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/padroes-basicos-de-codificacao-via-psr-1\/","title":{"rendered":"Padr\u00f5es B\u00e1sicos de Codifica\u00e7\u00e3o via PSR-1"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-os-psrs-versus-os-padroes-de-codificacao-do-wordpress\/\" title=\"Ontem\" >Ontem<\/a>, falei brevemente sobre uma l\u00f3gica para usar <a href=\"http:\/\/www.php-fig.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSRs<\/a> versus os <a href=\"https:\/\/codex.wordpress.org\/WordPress_Coding_Standards\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Padr\u00f5es de Codifica\u00e7\u00e3o do WordPress<\/a> e o quando e o porqu\u00ea de ambos. Mas isso n\u00e3o significa que n\u00e3o seja sem seus pontos de confus\u00e3o, especialmente se voc\u00ea est\u00e1 apenas come\u00e7ando com eles, certo?<\/p>\n<p>Com isso, quero dizer: digamos que voc\u00ea trabalha com os Padr\u00f5es de Codifica\u00e7\u00e3o do WordPress h\u00e1 anos (porque eu posso me identificar) e agora h\u00e1 todo esse novo conjunto de regras e diretrizes a seguir. Mas n\u00e3o \u00e9 uma simples quest\u00e3o de alterar alguns espa\u00e7os em branco e renomear arquivos.<\/p>\n<p>H\u00e1 outros pontos a seguir, e cada um \u00e9 descrito em um n\u00famero, literalmente (PSR-1, PSR-2 e assim por diante), de como algo deve funcionar.<\/p>\n<p>Ent\u00e3o, quando se trata apenas dos padr\u00f5es b\u00e1sicos de codifica\u00e7\u00e3o descritos no PSR-1, quais s\u00e3o algumas \u00e1reas problem\u00e1ticas que podemos encontrar como desenvolvedores do WordPress?<\/p>\n<h2>Padr\u00f5es b\u00e1sicos de codifica\u00e7\u00e3o (e efeitos colaterais)<\/h2>\n<p>N\u00e3o tenho planos de revisar cada um dos documentos e refazer o que j\u00e1 podemos aprender simplesmente <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lendo-os<\/a>, mas acho que h\u00e1 algo a ser dito sobre pegar algo que muitos de n\u00f3s fazemos ou experimentamos e ver como isso pode mudar dentro o contexto do WordPress.<\/p>\n<p>Pegue os <strong>Efeitos Colaterais<\/strong> do Padr\u00e3o B\u00e1sico de Codifica\u00e7\u00e3o (ou <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> ), por exemplo:<\/p>\n<blockquote>\n<p>Um arquivo DEVE declarar novos s\u00edmbolos (classes, fun\u00e7\u00f5es, constantes, etc.) e n\u00e3o causar outros efeitos colaterais, ou DEVE executar l\u00f3gica com efeitos colaterais, mas N\u00c3O DEVE fazer as duas coisas.<\/p>\n<p>A frase &#8220;efeitos colaterais&quot; significa execu\u00e7\u00e3o de l\u00f3gica n\u00e3o diretamente relacionada \u00e0 declara\u00e7\u00e3o de classes, fun\u00e7\u00f5es, constantes, etc., meramente pela inclus\u00e3o do arquivo.<\/p>\n<\/blockquote>\n<p>Pessoalmente, acho a segunda frase a chave para entender e evitar ao m\u00e1ximo os efeitos colaterais em nosso c\u00f3digo. Ou seja, qualquer coisa que nossas classes fa\u00e7am deve ser autocontida ou coesa com algo que possa ter sido injetado de alguma forma.<\/p>\n<p>Independentemente disso, encontrar o c\u00f3digo que introduz um efeito colateral e limp\u00e1-lo n\u00e3o deve ser muito dif\u00edcil. Na verdade, vou me usar como exemplo.<\/p>\n<p>Veja este <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-00-toggle-admin-notices-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">trecho de c\u00f3digo<\/a> espec\u00edfico :<\/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 \u00e9 direto de <a href=\"https:\/\/tommcfarlin.com\/wordpress-admin-notices\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Toggle Admin Notices<\/a>. Concedido, \u00e9 simples, e o <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reposit\u00f3rio<\/a> mostra uma nota de como alter\u00e1-lo. Isso demonstra o ponto, no entanto, certo?<\/p>\n<p>Qual \u00e9 a solu\u00e7\u00e3o? Isso vem na forma de Autoloading (que tamb\u00e9m \u00e9 abordado no <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> ). E da\u00ed se eu o refatorasse, para que ele seguisse o PSR-1 corretamente? Ent\u00e3o, uma maneira de refatorar pode <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-01-toggle-admin-notices-autoloading-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ser assim<\/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>Este \u00e9 um grande exemplo? Provavelmente n\u00e3o. Mas h\u00e1 mais do que apenas incluir arquivos. Incluir esses arquivos \u00e9 fazer com que esse \u00fanico arquivo introduza uma variedade de efeitos colaterais.<\/p>\n<p>Isso significa que esse arquivo sozinho \u00e9 respons\u00e1vel por fazer muito mais do que apenas essas quatro linhas de c\u00f3digo. Pense nisso como incorporar tudo o que outros arquivos implementam. Torna-se mais complexo nesse ponto.<\/p>\n<p>Ent\u00e3o pegue essa ideia e mova-a para um sistema muito maior e voc\u00ea poder\u00e1 ver como e por que isso seria problem\u00e1tico.<\/p>\n<p>Claro, tamb\u00e9m existem formas alternativas. E este \u00e9 apenas um exemplo. Autodepreciativo tamb\u00e9m. A quest\u00e3o n\u00e3o \u00e9 tanto mostrar uma maneira definitiva de fazer isso, mas come\u00e7ar a semear pensamentos sobre como projetamos, planejamos, constru\u00edmos e incorporamos classes.<\/p>\n<h3>E as visualiza\u00e7\u00f5es?<\/h3>\n<p>Quando se trata de escrever plugins, sou parcial em tratar o que os usu\u00e1rios ver\u00e3o como <strong>visualiza\u00e7\u00f5es.\u00a0<\/strong>Mas parece haver um problema aqui: \u00e9 considerado uma pr\u00e1tica ruim incluir arquivos, pois apresenta efeitos colaterais.<\/p>\n<p>Portanto, n\u00e3o queremos gerar l\u00f3gica em nossas classes, mas tamb\u00e9m queremos separar a apresenta\u00e7\u00e3o da l\u00f3gica de neg\u00f3cios.<\/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=\"Padr\u00f5es B\u00e1sicos de Codifica\u00e7\u00e3o via PSR-1\" ><\/a><\/p>\n<p>O que devemos fazer?<\/p>\n<blockquote>\n<p>A diferen\u00e7a&#8230; \u00e9 que vamos usar programa\u00e7\u00e3o orientada a objetos para fazer isso. Vamos projetar uma classe que gera HTML usando o template PHP.<\/p>\n<\/blockquote>\n<p>Isso foi abordado em profundidade <a href=\"https:\/\/carlalexander.ca\/designing-class-generate-wordpress-html-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">por outra pessoa<\/a>, e eu recomendo a leitura desse post espec\u00edfico para tirar a ideia dos efeitos colaterais, evit\u00e1-los e incorporar pr\u00e1ticas s\u00f3lidas o m\u00e1ximo poss\u00edvel.<\/p>\n<h2>\u2026E Ativos e Arquivos Relacionados?<\/h2>\n<p>Eu sei: a ideia de se afastar dos efeitos colaterais (quanto mais identific\u00e1-los) pode ser estranha no come\u00e7o, especialmente quando voc\u00ea pensa em certas coisas que fizemos por tanto tempo.<\/p>\n<p>E pode levantar quest\u00f5es como: Incluir arquivos JavaScript ou arquivos CSS est\u00e1 errado? Provavelmente \u00e9 assunto para outro post. Lembre-se, por\u00e9m, de que existem fun\u00e7\u00f5es centrais da API diretamente relacionadas a isso, e elas podem ser parte de uma classe estritamente respons\u00e1vel por fazer isso.<\/p>\n<p>Se o objetivo de uma classe \u00e9 fazer exatamente isso e apenas isso e usa fun\u00e7\u00f5es de API para fazer isso, eu diria que provavelmente est\u00e1 tudo bem.<\/p>\n<p>Mas estou divagando sobre isso por enquanto (e talvez seja um t\u00f3pico para os coment\u00e1rios ou, novamente, outro post).<\/p>\n<p>Em vez disso, mantenha suas aulas enxutas e objetivas. Eles devem fazer como o <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> afirma e evitar fazer coisas como &#8220;[declarar] novas classes, fun\u00e7\u00f5es, constantes, etc.&#8221; e &#8220;[executar] l\u00f3gica com efeitos colaterais&#8221;.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mantenha suas aulas objetivas. Evite coisas como \u201c[declarar] novas classes, fun\u00e7\u00f5es, constantes, etc.\u201d e \u201c[executar] l\u00f3gica com efeitos colaterais\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":[722],"tags":[1170],"class_list":["post-229719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=229719"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229719\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/166224"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}