{"id":234112,"date":"2022-11-15T10:50:00","date_gmt":"2022-11-15T07:50:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234112"},"modified":"2022-11-15T10:53:26","modified_gmt":"2022-11-15T07:53:26","slug":"por-que-se-preocupar-com-o-carregamento-automatico-no-wordpress-parte-3","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/por-que-se-preocupar-com-o-carregamento-automatico-no-wordpress-parte-3\/","title":{"rendered":"Por que se preocupar com o carregamento autom\u00e1tico no WordPress, parte 3"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/por-que-se-preocupar-com-o-carregamento-automatico-no-wordpress-parte-2\/\" title=\"No \u00faltimo post\">No \u00faltimo post<\/a>, eu disse que n\u00e3o poder\u00edamos ter alguns dos mesmos luxos que as linguagens compiladas e estaticamente tipadas t\u00eam. Especificamente, eu estava falando sobre a ideia de n\u00e3o ter que lidar com autoloaders.<\/p>\n<p>Em vez disso, linguagens compiladas podem pegar todos os arquivos que comp\u00f5em o programa, process\u00e1-los e agrup\u00e1-los em um \u00fanico bin\u00e1rio.<\/p>\n<p>Mas para fazer isso, ele precisa de um tipo espec\u00edfico de programa para fazer isso.<\/p>\n<h2>Autoloading no WordPress: Linkers e Autoloaders<\/h2>\n<p>Ou seja, ele usa um utilit\u00e1rio chamado <a href=\"https:\/\/en.wikipedia.org\/wiki\/Linker_(computing)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">linker<\/a>. Abordarei isso brevemente, mas ver o papel que desempenha no contexto de linguagens compiladas pode ajudar a fazer uma analogia com o funcionamento do carregamento autom\u00e1tico no WordPress (e PHP).<\/p>\n<h3>O que \u00e9 um Linker?<\/h3>\n<p>Dependendo da linguagem com a qual voc\u00ea est\u00e1 trabalhando, especialmente com linguagens de programa\u00e7\u00e3o orientadas a objetos, \u00e9 prov\u00e1vel que o c\u00f3digo se espalhe por v\u00e1rios arquivos.<\/p>\n<p>Al\u00e9m disso, cada um desses arquivos ser\u00e1 empacotado em seus pacotes (nos referimos a eles como namespaces como PHP, e a maioria das linguagens compiladas tamb\u00e9m faz o mesmo). Portanto, para fins de demonstra\u00e7\u00e3o, suponha que os arquivos estejam inclu\u00eddos em seus namespaces.<\/p>\n<p>Ent\u00e3o, em toda a base de c\u00f3digo, voc\u00ea tem todos esses arquivos relacionados por meio de namespaces, mas espalhados por arquivos separados.<\/p>\n<p>Quando chega a hora de compilar tudo isso em um \u00fanico bin\u00e1rio execut\u00e1vel, um programa chamado linker analisa o c\u00f3digo e faz m\u00e1gica para ajudar a criar um \u00fanico bin\u00e1rio execut\u00e1vel (em vez de uma cole\u00e7\u00e3o de arquivos como estamos acostumados a ver em projetos baseados em PHP).<\/p>\n<h3>E carregamento autom\u00e1tico?<\/h3>\n<p>Ent\u00e3o, quais s\u00e3o as semelhan\u00e7as entre carregamento autom\u00e1tico e vincula\u00e7\u00e3o? Como mencionado, os projetos que constru\u00edmos no WordPress (e PHP) residem consistentemente em arquivos separados. Ou seja, eles nunca ser\u00e3o compilados em um arquivo.<\/p>\n<p>Eu diria que era uma vez (embora isso ainda aconte\u00e7a), usamos <a href=\"https:\/\/php.net\/manual\/en\/function.include-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">include_once<\/a> ou <a href=\"https:\/\/php.net\/manual\/en\/function.require-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">require_once<\/a> para trazer todas as depend\u00eancias que precisamos. Mas o carregamento autom\u00e1tico nega a necessidade de fazer isso.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165652-61e7858e62d47.jpg\" 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-165652-61e7858e62d47.jpg\" alt=\"Por que se preocupar com o carregamento autom\u00e1tico no WordPress, parte 3\"><\/a><\/p>\n<p>Escrevendo manualmente um autoloader (sem usar o PSR4).<\/p>\n<p>Em vez disso, um autoloader pode pegar o c\u00f3digo que temos sempre que, digamos, instanciar uma classe e ent\u00e3o carregar automaticamente (da\u00ed seu nome) o arquivo sem a necessidade de incluir manualmente o arquivo.<\/p>\n<h3>A analogia<\/h3>\n<p>Enquanto um linker analisar\u00e1 a base de c\u00f3digo de um programa e montar\u00e1 automaticamente o bin\u00e1rio, um autoloader precisar\u00e1 de algum tipo de configura\u00e7\u00e3o para saber onde est\u00e3o as classes, como localizar um arquivo no sistema de arquivos dado seu namespace e nome de classe e em breve.<\/p>\n<p>Al\u00e9m disso, existem diferentes maneiras de fazer isso, dependendo se voc\u00ea optar por usar algo como <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> ou outra estrat\u00e9gia de carregamento. Mas isso est\u00e1 al\u00e9m do escopo deste post.<\/p>\n<h2>\u00c9 isso<\/h2>\n<p>A ideia por tr\u00e1s de tudo isso \u00e9 entender como linguagens estaticamente tipadas, que s\u00e3o frequentemente \u2013 embora nem sempre \u2013 linguagens compiladas e como dinamicamente tipadas \u2013 que muitas vezes n\u00e3o s\u00e3o compiladas (pense em JavaScript, PHP, etc.) jeitos diferentes.<\/p>\n<p>Resumidamente:<\/p>\n<ul>\n<li>linguagens compiladas usam linkers,<\/li>\n<li>linguagens din\u00e2micas usam carregadores autom\u00e1ticos.<\/li>\n<\/ul>\n<p>E isso \u00e9 tudo o que h\u00e1 para isso, realmente.<\/p>\n<p>Mas por que isso \u00e9 importante? Para entender os benef\u00edcios do carregamento autom\u00e1tico no WordPress e ter uma base para t\u00f3picos mais avan\u00e7ados, acho importante entender como e por que fazemos certas coisas.<\/p>\n<p>E se nada mais, pode nos ajudar a sermos melhores desenvolvedores.<\/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>Os vinculadores n\u00e3o s\u00e3o totalmente diferentes do carregamento autom\u00e1tico no WordPress (e PHP). Veja como eles funcionam e por que isso ajuda a entender como eles funcionam.<\/p>\n","protected":false},"author":1,"featured_media":223872,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,846,867],"tags":[1170],"class_list":["post-234112","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/234112","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=234112"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/234112\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/223872"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=234112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=234112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=234112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}