{"id":229534,"date":"2022-11-04T17:12:00","date_gmt":"2022-11-04T14:12:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229534"},"modified":"2022-11-09T08:21:36","modified_gmt":"2022-11-09T05:21:36","slug":"prototipagem-rapida-apresentando-o-autoloading","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-apresentando-o-autoloading\/","title":{"rendered":"Prototipagem R\u00e1pida: Apresentando o Autoloading"},"content":{"rendered":"\n<p>Nos \u00faltimos posts, passei pelo processo de levar uma ideia do conceito ao prot\u00f3tipo.<\/p>\n<p>Concedido, h\u00e1 algumas coisas que voc\u00ea pode mudar (e h\u00e1 algumas coisas que eu mudaria em rela\u00e7\u00e3o \u00e0 organiza\u00e7\u00e3o de aulas). Mas o objetivo da s\u00e9rie n\u00e3o \u00e9 percorrer todas as v\u00e1rias t\u00e9cnicas orientadas a objetos que podem ser usadas para criar uma solu\u00e7\u00e3o.<\/p>\n<p>Em vez disso, trata-se de pegar um prot\u00f3tipo e convert\u00ea-lo em algo um pouco mais profissional. Ainda h\u00e1 uma coisa que precisamos fazer, no entanto.<\/p>\n<p>No momento, inclu\u00edmos todos os nossos arquivos por meio de instru\u00e7\u00f5es require. E isso funciona bem para arquivos pequenos, mas introduzir o carregamento autom\u00e1tico em conjunto com namespaces pode tornar o aplicativo ainda mais limpo.<\/p>\n<p>E \u00e9 isso que vamos fazer.<\/p>\n<h3>Apresentando o carregamento autom\u00e1tico<\/h3>\n<p>Lembre-se de um post anterior (se voc\u00ea o leu), que o carregamento autom\u00e1tico \u00e9 uma ideia simples:<\/p>\n<p>Parece \u00f3timo, certo? Mas h\u00e1 uma ressalva: voc\u00ea precisa escrever o autoloader. PHP n\u00e3o pode descobrir por conta pr\u00f3pria.<\/p>\n<p>E \u00e9 por isso que sou f\u00e3 de garantir que nossos namespaces tamb\u00e9m sigam uma estrutura de diret\u00f3rio consistente: se voc\u00ea analisar o namespace e o nome do arquivo, \u00e9 relativamente f\u00e1cil construir o caminho para o arquivo e carreg\u00e1-lo automaticamente.<\/p>\n<p>Parece confuso? Primeiro, vamos dar uma olhada em onde colocaremos o autoloader em rela\u00e7\u00e3o \u00e0 nossa estrutura de diret\u00f3rios:<\/p>\n<p>Em seguida, atualize o arquivo bootstrap do seu plug-in para que ele <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-plugin-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">exija apenas o arquivo autoloader<\/a>.<\/p>\n<pre><code>&lt;?php\n\/**\n * Three Recent Posts\n *\n * @package     TRP\n * @author      Tom McFarlin\n * @copyright   2017 Tom McFarlin\n * @license     MIT\n *\n * @wordpress-plugin\n * Plugin Name: Three Recent Posts\n * Plugin URI:  https:\/\/tommcfarlin.com\/three-recent-posts\/\n * Description: Displays the three mot recent posts in your post editor screen.\n * Version:     1.0.0\n * Author:      Tom McFarlin\n * Author URI:  https:\/\/tommcfarlin.com\n * Text Domain: three-recent-posts\n * License:     GPL\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\/\n\nnamespace McFarlinTRP;\nuse McFarlinTRPDisplayMeta_Box;\n\n\/\/ Import the autoloader.\ninclude_once 'Includes\/autoload.php';\n\nadd_action( 'add_meta_boxes', __NAMESPACE__. 'trp_start' );\n\/**\n * Starts the plugin.\n *\/\nfunction trp_start() {\n\n    $meta_box = new Meta_Box( dirname( __FILE__) );\n    $meta_box-&gt;init();\n}\n<\/code><\/pre>\n<p>Claro, precisamos do autoloader para carregar nossos arquivos. Essencialmente, a forma como funciona \u00e9 esta:<\/p>\n<ol>\n<li>separe os componentes do nome do arquivo de entrada (como o caminho do diret\u00f3rio e o nome do arquivo),<\/li>\n<li>substitua quaisquer sublinhados por h\u00edfens para garantir que o arquivo esteja seguindo a estrutura do nome de arquivo da classe,<\/li>\n<li>comece a criar o nome do caminho totalmente qualificado (que \u00e9 o diret\u00f3rio, o nome do arquivo etc.),<\/li>\n<li>itere pelo namespace at\u00e9 o nome da classe e construa um nome totalmente qualificado para o arquivo,<\/li>\n<li>inclu\u00ed-lo no projeto.<\/li>\n<\/ol>\n<p>\u00c9 direto, n\u00e3o \u00e9? Se voc\u00ea seguir um namespace, diret\u00f3rio, nome de classe e esquema de nomenclatura de arquivo consistentes, poder\u00e1 reutilizar o mesmo carregador autom\u00e1tico em qualquer projeto.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-autoload-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Aqui est\u00e1 uma c\u00f3pia de um autoloader<\/a> que eu uso e coloco em quase qualquer projeto que eu uso. Voc\u00ea ver\u00e1 que segue exatamente o que foi abordado acima:<\/p>\n<pre><code>&lt;?php\n\/**\n * Automatically loads the specified file.\n *\n * @package McFarlinTFP\n *\/\n\nnamespace McFarlinTFP;\n\n\/**\n * Automatically loads the specified file.\n *\n * Examines the fully qualified class name, separates it into components, then creates\n * a string that represents where the file is loaded on disk.\n *\n * @package McFarlinTFP;\n *\/\nspl_autoload_register(function( $filename) {\n\n    \/\/ First, separate the components of the incoming file.\n    $file_path = explode( '', $filename );\n\n    \/\/ Get the last index of the array. This is the class we're loading.\n    if (isset( $file_path[ count( $file_path) - 1 ])) {\n\n        $class_file = strtolower(\n            $file_path[ count( $file_path) - 1 ]\n        );\n\n        \/**\n         * The classname has an underscore, so we need to replace it\n         * with a hyphen for the file name.\n         *\/\n        $class_file = str_ireplace( '_', '-', $class_file );\n        $class_file = \"class-$class_file.php\";\n    }\n\n    \/**\n     * Find the fully qualified path to the class file by iterating through the $file_path array.\n     * We ignore the first index since it's always the top-level package. The last index is always\n     * the file so we append that at the end.\n     *\/\n    $fully_qualified_path = trailingslashit(\n        dirname(\n            dirname( __FILE__)) );\n\n    \/**\n     * We start at the second index of the namespace because our directory\n     * structure does not include 'McFarlin\/TRP'.\n     *\/\n    for ($i = 2; $i &lt; count( $file_path) - 1; $i++) {\n\n        $dir = strtolower( $file_path[ $i ] );\n        $fully_qualified_path .= trailingslashit( $dir );\n    }\n    $fully_qualified_path .= $class_file;\n\n    \/\/ Now we include the file.\n    if (file_exists( $fully_qualified_path)) {\n        include_once( $fully_qualified_path );\n    }\n});<\/code><\/pre>\n<p>E com isso, o plugin \u00e9 empacotado para a vers\u00e3o 1.0.0. Voc\u00ea pode <a href=\"https:\/\/github.com\/tommcfarlin\/three-recent-posts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">conferir no GitHub<\/a> (literalmente e apenas para revis\u00e3o). E espero que isso tenha ajudado a percorrer o processo de passar da prototipagem r\u00e1pida ao conceito dentro do conceito do WordPress.<\/p>\n<h2>Postagens da s\u00e9rie<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-com-wordpress-do-conceito-ao-plugin\/\" title=\"Prototipagem R\u00e1pida com WordPress: Do Conceito ao Plugin\">Prototipagem R\u00e1pida com WordPress: Do Conceito ao Plugin<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-com-wordpress-analise-de-conceito\/\" title=\"Prototipagem R\u00e1pida com WordPress: An\u00e1lise de Conceito\">Prototipagem R\u00e1pida com WordPress: An\u00e1lise de Conceito<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-prototipo-para-codigo-parte-1\/\" title=\"Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 1\">Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/prototipagem-rapida-prototipo-para-codigo-parte-2\/\" title=\"Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 2\">Prototipagem R\u00e1pida: Prot\u00f3tipo para C\u00f3digo, Parte 2<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/introducing-autoloading\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Prototipagem R\u00e1pida: Apresentando o Autoloading<\/a><\/li>\n<\/ol>\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>A introdu\u00e7\u00e3o do carregamento autom\u00e1tico em conjunto com namespaces em um plug-in do WordPress pode tornar o aplicativo ainda mais limpo.<\/p>\n","protected":false},"author":1,"featured_media":220982,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,920,846],"tags":[1170],"class_list":["post-229534","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-outro","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229534","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=229534"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229534\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/220982"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}