{"id":1535,"date":"2026-07-26T19:59:57","date_gmt":"2026-07-26T22:59:57","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=1535"},"modified":"2026-07-26T19:59:58","modified_gmt":"2026-07-26T22:59:58","slug":"ambiente-php-no-windows","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/","title":{"rendered":"Como configurar um ambiente PHP profissional no Windows"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"553\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2026\/07\/1280px-PHP-logo.svg-1024x553.png\" alt=\"Ambiente PHP no Windows representado pelo logotipo da linguagem PHP\" class=\"wp-image-1536\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2026\/07\/1280px-PHP-logo.svg-1024x553.png 1024w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2026\/07\/1280px-PHP-logo.svg-300x162.png 300w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2026\/07\/1280px-PHP-logo.svg-768x415.png 768w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2026\/07\/1280px-PHP-logo.svg.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Logotipo da linguagem PHP, utilizado para representar a configura\u00e7\u00e3o de um ambiente de desenvolvimento Back-End.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Montar um <strong>ambiente PHP no Windows<\/strong> n\u00e3o significa apenas instalar um programa e criar um arquivo com a extens\u00e3o <code>.php<\/code>. Um desenvolvedor Back-End precisa trabalhar com um conjunto de ferramentas que permita executar aplica\u00e7\u00f5es, instalar depend\u00eancias, conectar bancos de dados, analisar erros e versionar o c\u00f3digo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nesta primeira li\u00e7\u00e3o da trilha de prepara\u00e7\u00e3o para vagas de desenvolvimento PHP, vamos configurar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP 8 em uma vers\u00e3o oficialmente suportada;<\/li>\n\n\n\n<li>Composer para gerenciamento de depend\u00eancias;<\/li>\n\n\n\n<li>MySQL para persist\u00eancia dos dados;<\/li>\n\n\n\n<li>Git para controle de vers\u00e3o;<\/li>\n\n\n\n<li>Visual Studio Code como editor;<\/li>\n\n\n\n<li>autoload PSR-4 para carregar classes automaticamente;<\/li>\n\n\n\n<li>um pequeno endpoint que responde em JSON.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ao final, voc\u00ea ter\u00e1 um projeto funcional e uma base adequada para estudar PHP puro, orienta\u00e7\u00e3o a objetos, APIs REST, Laravel, seguran\u00e7a, testes e desempenho.<\/p>\n\n\n\n<div class=\"markdown-heading\"><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#O_que_voce_aprendera_nesta_licao\" >O que voc\u00ea aprender\u00e1 nesta li\u00e7\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Ferramentas_necessarias\" >Ferramentas necess\u00e1rias<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#1_Diagnostico_inicial_do_computador\" >1. Diagn\u00f3stico inicial do computador<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#2_Como_instalar_PHP_no_Windows\" >2. Como instalar PHP no Windows<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Escolha_do_pacote\" >Escolha do pacote<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Extracao_dos_arquivos\" >Extra\u00e7\u00e3o dos arquivos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Criar_o_arquivo_phpini\" >Criar o arquivo php.ini<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Configurar_o_diretorio_das_extensoes\" >Configurar o diret\u00f3rio das extens\u00f5es<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Habilitar_extensoes_importantes\" >Habilitar extens\u00f5es importantes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Configurar_o_fuso_horario\" >Configurar o fuso hor\u00e1rio<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Adicionar_PHP_ao_PATH\" >Adicionar PHP ao PATH<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Validar_a_instalacao_do_PHP\" >Validar a instala\u00e7\u00e3o do PHP<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#3_Instalacao_do_Composer\" >3. Instala\u00e7\u00e3o do Composer<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Composer_nao_e_um_framework\" >Composer n\u00e3o \u00e9 um framework<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#4_Instalacao_e_configuracao_do_Git\" >4. Instala\u00e7\u00e3o e configura\u00e7\u00e3o do Git<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#5_Visual_Studio_Code_para_PHP\" >5. Visual Studio Code para PHP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#6_Instalacao_do_MySQL\" >6. Instala\u00e7\u00e3o do MySQL<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Nao_use_root_na_aplicacao\" >N\u00e3o use root na aplica\u00e7\u00e3o<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#7_Criar_o_primeiro_projeto_PHP\" >7. Criar o primeiro projeto PHP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#8_Configurar_o_Composer_e_o_autoload_PSR-4\" >8. Configurar o Composer e o autoload PSR-4<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#O_que_e_PSR-4\" >O que \u00e9 PSR-4?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#9_Criar_uma_classe_de_diagnostico\" >9. Criar uma classe de diagn\u00f3stico<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Entendendo_a_classe\" >Entendendo a classe<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#10_Criar_o_ponto_de_entrada_da_aplicacao\" >10. Criar o ponto de entrada da aplica\u00e7\u00e3o<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Carregamento_automatico_das_classes\" >Carregamento autom\u00e1tico das classes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Cabecalho_da_resposta\" >Cabe\u00e7alho da resposta<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Status_HTTP\" >Status HTTP<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#11_Executar_o_servidor_local\" >11. Executar o servidor local<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#12_Validar_a_sintaxe_do_codigo\" >12. Validar a sintaxe do c\u00f3digo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#13_Criar_o_arquivo_gitignore\" >13. Criar o arquivo .gitignore<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#14_Criar_os_primeiros_commits\" >14. Criar os primeiros commits<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Exercicio_guiado\" >Exerc\u00edcio guiado<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Desafio_da_licao\" >Desafio da li\u00e7\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Perguntas_comuns_em_entrevistas_PHP\" >Perguntas comuns em entrevistas PHP<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Qual_e_a_diferenca_entre_PHP_e_Composer\" >Qual \u00e9 a diferen\u00e7a entre PHP e Composer?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Para_que_serve_o_phpini\" >Para que serve o php.ini?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#O_que_e_uma_extensao_PHP\" >O que \u00e9 uma extens\u00e3o PHP?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#O_que_faz_declarestrict_types1\" >O que faz declare(strict_types=1)?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Para_que_serve_o_autoload\" >Para que serve o autoload?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#O_que_e_PSR-4-2\" >O que \u00e9 PSR-4?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#O_servidor_php_-S_pode_ser_usado_em_producao\" >O servidor php -S pode ser usado em produ\u00e7\u00e3o?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Por_que_uma_aplicacao_nao_deve_acessar_o_MySQL_como_root\" >Por que uma aplica\u00e7\u00e3o n\u00e3o deve acessar o MySQL como root?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Qual_e_a_diferenca_entre_mysqli_e_PDO\" >Qual \u00e9 a diferen\u00e7a entre mysqli e PDO?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Checklist_de_conclusao\" >Checklist de conclus\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Proximos_passos\" >Pr\u00f3ximos passos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Referencias_oficiais\" >Refer\u00eancias oficiais<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/ambiente-php-no-windows\/#Construindo_uma_Aplicacao_Web_Completa_com_PHP_e_MySQL\" >Construindo uma Aplica\u00e7\u00e3o Web Completa com PHP e MySQL<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_voce_aprendera_nesta_licao\"><\/span>O que voc\u00ea aprender\u00e1 nesta li\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-o-que-voc\u00ea-aprender\u00e1-nesta-li\u00e7\u00e3o\" class=\"anchor\" aria-label=\"Permalink: O que voc\u00ea aprender\u00e1 nesta li\u00e7\u00e3o\" href=\"#o-que-voc%C3%AA-aprender%C3%A1-nesta-li%C3%A7%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ao concluir a configura\u00e7\u00e3o do <strong>ambiente PHP no Windows<\/strong>, voc\u00ea dever\u00e1 ser capaz de:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>executar o PHP pelo terminal;<\/li>\n\n\n\n<li>identificar qual arquivo <code>php.ini<\/code> est\u00e1 sendo carregado;<\/li>\n\n\n\n<li>habilitar extens\u00f5es essenciais;<\/li>\n\n\n\n<li>usar o Composer em qualquer diret\u00f3rio;<\/li>\n\n\n\n<li>criar um banco e um usu\u00e1rio de aplica\u00e7\u00e3o no MySQL;<\/li>\n\n\n\n<li>iniciar um reposit\u00f3rio Git;<\/li>\n\n\n\n<li>organizar classes com namespace e autoload PSR-4;<\/li>\n\n\n\n<li>executar o servidor local do PHP;<\/li>\n\n\n\n<li>retornar uma resposta JSON pelo navegador;<\/li>\n\n\n\n<li>validar a sintaxe dos arquivos antes do commit.<\/li>\n<\/ol>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Ferramentas_necessarias\"><\/span>Ferramentas necess\u00e1rias<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-ferramentas-necess\u00e1rias\" class=\"anchor\" aria-label=\"Permalink: Ferramentas necess\u00e1rias\" href=\"#ferramentas-necess%C3%A1rias\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Para acompanhar o artigo, voc\u00ea precisar\u00e1 das seguintes ferramentas:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Ferramenta<\/th><th>Finalidade<\/th><\/tr><\/thead><tbody><tr><td><strong>PHP 8<\/strong><\/td><td>Executar a linguagem e a aplica\u00e7\u00e3o<\/td><\/tr><tr><td><strong>Composer<\/strong><\/td><td>Gerenciar depend\u00eancias e gerar o autoload<\/td><\/tr><tr><td><strong>MySQL<\/strong><\/td><td>Armazenar dados relacionais<\/td><\/tr><tr><td><strong>Git<\/strong><\/td><td>Controlar o hist\u00f3rico do c\u00f3digo<\/td><\/tr><tr><td><strong>Visual Studio Code<\/strong><\/td><td>Editar e analisar os arquivos do projeto<\/td><\/tr><tr><td><strong>PowerShell<\/strong><\/td><td>Executar os comandos apresentados<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Prefira uma vers\u00e3o est\u00e1vel e oficialmente suportada do PHP. Para uma instala\u00e7\u00e3o nova, PHP 8.4 ou 8.5 s\u00e3o escolhas adequadas. Evite come\u00e7ar um projeto com vers\u00f5es que j\u00e1 chegaram ao fim do suporte de seguran\u00e7a.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"1_Diagnostico_inicial_do_computador\"><\/span>1. Diagn\u00f3stico inicial do computador<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-1-diagn\u00f3stico-inicial-do-computador\" class=\"anchor\" aria-label=\"Permalink: 1. Diagn\u00f3stico inicial do computador\" href=\"#1-diagn%C3%B3stico-inicial-do-computador\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Abra o PowerShell e execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>php <span class=\"pl-k\">-<\/span>v\ncomposer <span class=\"pl-k\">--<\/span>version\ngit <span class=\"pl-k\">--<\/span>version\nmysql <span class=\"pl-k\">--<\/span>version\ncode <span class=\"pl-k\">--<\/span>version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o h\u00e1 problema caso alguns comandos ainda n\u00e3o sejam reconhecidos. O objetivo \u00e9 descobrir quais ferramentas j\u00e1 est\u00e3o instaladas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No final da li\u00e7\u00e3o, repetiremos os mesmos comandos para validar a configura\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"2_Como_instalar_PHP_no_Windows\"><\/span>2. Como instalar PHP no Windows<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-2-como-instalar-php-no-windows\" class=\"anchor\" aria-label=\"Permalink: 2. Como instalar PHP no Windows\" href=\"#2-como-instalar-php-no-windows\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A instala\u00e7\u00e3o manual ajuda a compreender onde o PHP est\u00e1 localizado, como o arquivo de configura\u00e7\u00e3o funciona e de que maneira as extens\u00f5es s\u00e3o carregadas.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Escolha_do_pacote\"><\/span>Escolha do pacote<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-escolha-do-pacote\" class=\"anchor\" aria-label=\"Permalink: Escolha do pacote\" href=\"#escolha-do-pacote\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Na p\u00e1gina oficial de downloads do PHP para Windows, escolha:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>uma vers\u00e3o est\u00e1vel do PHP 8;<\/li>\n\n\n\n<li>arquitetura <strong>x64<\/strong>;<\/li>\n\n\n\n<li>compila\u00e7\u00e3o <strong>Non Thread Safe \u2014 NTS<\/strong> para uso por linha de comando, servidor embutido ou FastCGI;<\/li>\n\n\n\n<li>arquivo compactado em formato ZIP.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A compila\u00e7\u00e3o Thread Safe \u00e9 necess\u00e1ria em cen\u00e1rios espec\u00edficos, como o carregamento do PHP diretamente como m\u00f3dulo do Apache. Nesta trilha utilizaremos inicialmente o terminal e o servidor embutido, portanto a vers\u00e3o NTS \u00e9 suficiente.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Extracao_dos_arquivos\"><\/span>Extra\u00e7\u00e3o dos arquivos<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-extra\u00e7\u00e3o-dos-arquivos\" class=\"anchor\" aria-label=\"Permalink: Extra\u00e7\u00e3o dos arquivos\" href=\"#extra%C3%A7%C3%A3o-dos-arquivos\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Extraia o conte\u00fado para uma pasta permanente. Um exemplo \u00e9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\tools\\php\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea pode escolher outro local. O requisito importante \u00e9 manter o PHP em uma pasta que n\u00e3o ser\u00e1 apagada ou movida logo depois da configura\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Confirme se o execut\u00e1vel existe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\tools\\php\\php.exe\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Criar_o_arquivo_phpini\"><\/span>Criar o arquivo php.ini<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-criar-o-arquivo-phpini\" class=\"anchor\" aria-label=\"Permalink: Criar o arquivo php.ini\" href=\"#criar-o-arquivo-phpini\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Dentro da pasta do PHP, localize:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php.ini-development\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Copie o arquivo e renomeie a c\u00f3pia para:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php.ini\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pelo PowerShell, considerando o caminho de exemplo:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre><span class=\"pl-c1\">Copy-Item<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>C:\\tools\\php\\php.ini-development<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>C:\\tools\\php\\php.ini<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O arquivo <code>php.ini-development<\/code> possui configura\u00e7\u00f5es apropriadas para desenvolvimento local. Em produ\u00e7\u00e3o, a exibi\u00e7\u00e3o de erros e outras op\u00e7\u00f5es precisam ser revisadas.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Configurar_o_diretorio_das_extensoes\"><\/span>Configurar o diret\u00f3rio das extens\u00f5es<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-configurar-o-diret\u00f3rio-das-extens\u00f5es\" class=\"anchor\" aria-label=\"Permalink: Configurar o diret\u00f3rio das extens\u00f5es\" href=\"#configurar-o-diret%C3%B3rio-das-extens%C3%B5es\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Abra o <code>php.ini<\/code> e procure:<\/p>\n\n\n\n<div class=\"highlight highlight-source-ini\"><pre><span class=\"pl-c\"><span class=\"pl-c\">;<\/span>extension_dir = \"ext\"<\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Remova o ponto e v\u00edrgula:<\/p>\n\n\n\n<div class=\"highlight highlight-source-ini\"><pre><span class=\"pl-k\">extension_dir<\/span> = <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>ext<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O ponto e v\u00edrgula indica um coment\u00e1rio em arquivos INI. Enquanto ele estiver presente, a configura\u00e7\u00e3o n\u00e3o ser\u00e1 aplicada.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Habilitar_extensoes_importantes\"><\/span>Habilitar extens\u00f5es importantes<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-habilitar-extens\u00f5es-importantes\" class=\"anchor\" aria-label=\"Permalink: Habilitar extens\u00f5es importantes\" href=\"#habilitar-extens%C3%B5es-importantes\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Procure as extens\u00f5es abaixo e remova o <code>;<\/code> do in\u00edcio das linhas:<\/p>\n\n\n\n<div class=\"highlight highlight-source-ini\"><pre><span class=\"pl-k\">extension<\/span>=curl\n<span class=\"pl-k\">extension<\/span>=fileinfo\n<span class=\"pl-k\">extension<\/span>=mbstring\n<span class=\"pl-k\">extension<\/span>=mysqli\n<span class=\"pl-k\">extension<\/span>=openssl\n<span class=\"pl-k\">extension<\/span>=pdo_mysql\n<span class=\"pl-k\">extension<\/span>=zip<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Essas extens\u00f5es ser\u00e3o utilizadas em diferentes momentos da trilha:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Extens\u00e3o<\/th><th>Utiliza\u00e7\u00e3o<\/th><\/tr><\/thead><tbody><tr><td><code>curl<\/code><\/td><td>Comunica\u00e7\u00e3o com servi\u00e7os e APIs externas<\/td><\/tr><tr><td><code>fileinfo<\/code><\/td><td>Identifica\u00e7\u00e3o segura do tipo de arquivo<\/td><\/tr><tr><td><code>mbstring<\/code><\/td><td>Manipula\u00e7\u00e3o de textos com caracteres multibyte<\/td><\/tr><tr><td><code>mysqli<\/code><\/td><td>Comunica\u00e7\u00e3o com MySQL pela extens\u00e3o MySQLi<\/td><\/tr><tr><td><code>openssl<\/code><\/td><td>Criptografia e conex\u00f5es seguras<\/td><\/tr><tr><td><code>pdo_mysql<\/code><\/td><td>Comunica\u00e7\u00e3o com MySQL usando PDO<\/td><\/tr><tr><td><code>zip<\/code><\/td><td>Leitura e cria\u00e7\u00e3o de arquivos compactados<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Configurar_o_fuso_horario\"><\/span>Configurar o fuso hor\u00e1rio<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-configurar-o-fuso-hor\u00e1rio\" class=\"anchor\" aria-label=\"Permalink: Configurar o fuso hor\u00e1rio\" href=\"#configurar-o-fuso-hor%C3%A1rio\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Procure:<\/p>\n\n\n\n<div class=\"highlight highlight-source-ini\"><pre><span class=\"pl-c\"><span class=\"pl-c\">;<\/span>date.timezone =<\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Para o hor\u00e1rio de Bras\u00edlia, configure:<\/p>\n\n\n\n<div class=\"highlight highlight-source-ini\"><pre><span class=\"pl-k\">date.timezone<\/span> = America\/Sao_Paulo<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A aplica\u00e7\u00e3o deve trabalhar com datas de forma consciente. Em sistemas distribu\u00eddos, \u00e9 comum persistir datas em UTC e convert\u00ea-las apenas na apresenta\u00e7\u00e3o. Nesta primeira configura\u00e7\u00e3o, usaremos o fuso local para facilitar os exerc\u00edcios.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Adicionar_PHP_ao_PATH\"><\/span>Adicionar PHP ao PATH<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-adicionar-php-ao-path\" class=\"anchor\" aria-label=\"Permalink: Adicionar PHP ao PATH\" href=\"#adicionar-php-ao-path\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Adicionar o PHP ao <code>PATH<\/code> permite executar <code>php<\/code> em qualquer pasta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Windows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>pesquise por <strong>Vari\u00e1veis de Ambiente<\/strong>;<\/li>\n\n\n\n<li>abra <strong>Editar as vari\u00e1veis de ambiente do sistema<\/strong>;<\/li>\n\n\n\n<li>clique em <strong>Vari\u00e1veis de Ambiente<\/strong>;<\/li>\n\n\n\n<li>selecione <code>Path<\/code> nas vari\u00e1veis do usu\u00e1rio;<\/li>\n\n\n\n<li>clique em <strong>Novo<\/strong>;<\/li>\n\n\n\n<li>informe a pasta que cont\u00e9m <code>php.exe<\/code>;<\/li>\n\n\n\n<li>confirme as altera\u00e7\u00f5es;<\/li>\n\n\n\n<li>feche e abra novamente o PowerShell.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Considerando o exemplo deste artigo, o valor seria:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\tools\\php\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o substitua todo o conte\u00fado da vari\u00e1vel <code>Path<\/code>. Apenas acrescente uma nova entrada.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Validar_a_instalacao_do_PHP\"><\/span>Validar a instala\u00e7\u00e3o do PHP<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-validar-a-instala\u00e7\u00e3o-do-php\" class=\"anchor\" aria-label=\"Permalink: Validar a instala\u00e7\u00e3o do PHP\" href=\"#validar-a-instala%C3%A7%C3%A3o-do-php\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>php <span class=\"pl-k\">-<\/span>v\nphp <span class=\"pl-k\">--<\/span>ini<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O primeiro comando exibe a vers\u00e3o do PHP. O segundo informa qual arquivo de configura\u00e7\u00e3o foi carregado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verifique tamb\u00e9m as extens\u00f5es:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>php <span class=\"pl-k\">-<\/span>m <span class=\"pl-k\">|<\/span> <span class=\"pl-c1\">Select-String<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>curl|fileinfo|mbstring|mysqli|openssl|PDO|pdo_mysql|zip<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Caso uma extens\u00e3o n\u00e3o apare\u00e7a:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>confirme se o <code>php.ini<\/code> correto est\u00e1 sendo carregado;<\/li>\n\n\n\n<li>verifique se o ponto e v\u00edrgula foi removido;<\/li>\n\n\n\n<li>confirme o valor de <code>extension_dir<\/code>;<\/li>\n\n\n\n<li>feche e abra o terminal;<\/li>\n\n\n\n<li>execute <code>php -m<\/code> novamente e observe poss\u00edveis mensagens de erro.<\/li>\n<\/ol>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"3_Instalacao_do_Composer\"><\/span>3. Instala\u00e7\u00e3o do Composer<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-3-instala\u00e7\u00e3o-do-composer\" class=\"anchor\" aria-label=\"Permalink: 3. Instala\u00e7\u00e3o do Composer\" href=\"#3-instala%C3%A7%C3%A3o-do-composer\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Composer \u00e9 o gerenciador de depend\u00eancias do ecossistema PHP. Ele permite declarar bibliotecas necess\u00e1rias, controlar vers\u00f5es e carregar classes automaticamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Windows, use o instalador oficial <code>Composer-Setup.exe<\/code>. Durante o processo, informe o caminho do <code>php.exe<\/code> configurado anteriormente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depois da instala\u00e7\u00e3o, abra um novo PowerShell e execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>composer <span class=\"pl-k\">--<\/span>version\ncomposer diagnose<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O comando <code>composer diagnose<\/code> verifica problemas comuns, como configura\u00e7\u00f5es incorretas do PHP, conectividade, certificados e permiss\u00f5es.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Composer_nao_e_um_framework\"><\/span>Composer n\u00e3o \u00e9 um framework<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-composer-n\u00e3o-\u00e9-um-framework\" class=\"anchor\" aria-label=\"Permalink: Composer n\u00e3o \u00e9 um framework\" href=\"#composer-n%C3%A3o-%C3%A9-um-framework\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 importante n\u00e3o confundir os conceitos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><strong>PHP<\/strong> \u00e9 a linguagem e o runtime;<\/li>\n\n\n\n<li><br><strong>Composer<\/strong> gerencia depend\u00eancias;<\/li>\n\n\n\n<li><br><strong>Laravel<\/strong>, <strong>Symfony<\/strong> e <strong>CodeIgniter<\/strong> s\u00e3o frameworks;<\/li>\n\n\n\n<li><br><strong>Packagist<\/strong> \u00e9 o principal reposit\u00f3rio p\u00fablico de pacotes usado pelo Composer.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Mesmo projetos feitos com PHP puro podem e devem utilizar Composer.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"4_Instalacao_e_configuracao_do_Git\"><\/span>4. Instala\u00e7\u00e3o e configura\u00e7\u00e3o do Git<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-4-instala\u00e7\u00e3o-e-configura\u00e7\u00e3o-do-git\" class=\"anchor\" aria-label=\"Permalink: 4. Instala\u00e7\u00e3o e configura\u00e7\u00e3o do Git\" href=\"#4-instala%C3%A7%C3%A3o-e-configura%C3%A7%C3%A3o-do-git\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Git registra a evolu\u00e7\u00e3o dos arquivos e permite criar branches, comparar altera\u00e7\u00f5es, recuperar vers\u00f5es e colaborar por meio de plataformas como GitHub e GitLab.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verifique se ele j\u00e1 est\u00e1 dispon\u00edvel:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>git <span class=\"pl-k\">--<\/span>version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Caso n\u00e3o esteja instalado, utilize o instalador oficial do Git para Windows ou o Windows Package Manager:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>winget install <span class=\"pl-k\">--<\/span>id Git.Git <span class=\"pl-k\">-<\/span>e <span class=\"pl-k\">--<\/span>source winget<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Configure sua identidade substituindo os valores de exemplo:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>git config <span class=\"pl-k\">--<\/span>global user.name <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>Seu Nome<span class=\"pl-pds\">\"<\/span><\/span>\ngit config <span class=\"pl-k\">--<\/span>global user.email <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>seu-email@example.com<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Defina <code>main<\/code> como nome padr\u00e3o da branch inicial:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>git config <span class=\"pl-k\">--<\/span>global init.defaultBranch main<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">No Windows, voc\u00ea tamb\u00e9m pode configurar o tratamento das quebras de linha:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>git config <span class=\"pl-k\">--<\/span>global core.autocrlf true<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Confira as configura\u00e7\u00f5es:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>git config <span class=\"pl-k\">--<\/span>global <span class=\"pl-k\">--<\/span>list<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Use preferencialmente o mesmo endere\u00e7o de e-mail associado \u00e0 sua conta do GitHub. Caso deseje manter o e-mail privado, o GitHub fornece um endere\u00e7o <code>noreply<\/code> para commits.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"5_Visual_Studio_Code_para_PHP\"><\/span>5. Visual Studio Code para PHP<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-5-visual-studio-code-para-php\" class=\"anchor\" aria-label=\"Permalink: 5. Visual Studio Code para PHP\" href=\"#5-visual-studio-code-para-php\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O Visual Studio Code pode ser usado como editor principal da trilha.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verifique a instala\u00e7\u00e3o:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>code <span class=\"pl-k\">--<\/span>version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Instale as extens\u00f5es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><strong>PHP Intelephense<\/strong> para an\u00e1lise, navega\u00e7\u00e3o e sugest\u00f5es de c\u00f3digo;<\/li>\n\n\n\n<li><br><strong>PHP Debug<\/strong> para integra\u00e7\u00e3o com Xdebug, que ser\u00e1 configurado em outra li\u00e7\u00e3o;<\/li>\n\n\n\n<li><br><strong>EditorConfig<\/strong> para padronizar indenta\u00e7\u00e3o e final de linha;<\/li>\n\n\n\n<li><br><strong>GitLens<\/strong> para ampliar a visualiza\u00e7\u00e3o do hist\u00f3rico Git.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Depois, configure o caminho do execut\u00e1vel PHP nas configura\u00e7\u00f5es do VS Code quando necess\u00e1rio. O editor tamb\u00e9m pode usar o comando <code>php -l<\/code> para validar a sintaxe.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"6_Instalacao_do_MySQL\"><\/span>6. Instala\u00e7\u00e3o do MySQL<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-6-instala\u00e7\u00e3o-do-mysql\" class=\"anchor\" aria-label=\"Permalink: 6. Instala\u00e7\u00e3o do MySQL\" href=\"#6-instala%C3%A7%C3%A3o-do-mysql\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Para novos ambientes, prefira uma vers\u00e3o est\u00e1vel do MySQL Community Server, como a s\u00e9rie 8.4 LTS. No Windows, o servidor pode ser instalado por um pacote MSI e configurado com o MySQL Configurator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tamb\u00e9m \u00e9 poss\u00edvel instalar o MySQL Workbench separadamente para administrar bancos por uma interface gr\u00e1fica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durante a configura\u00e7\u00e3o local, utilize valores semelhantes a estes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tipo de configura\u00e7\u00e3o: Development Computer\nPorta: 3306\nAutentica\u00e7\u00e3o: senha forte\nServi\u00e7o do Windows: inicializa\u00e7\u00e3o autom\u00e1tica\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A porta <code>3306<\/code> \u00e9 a porta convencional do MySQL. Ela pode ser alterada quando j\u00e1 existe outro servi\u00e7o usando o mesmo endere\u00e7o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Nao_use_root_na_aplicacao\"><\/span>N\u00e3o use root na aplica\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-n\u00e3o-use-root-na-aplica\u00e7\u00e3o\" class=\"anchor\" aria-label=\"Permalink: N\u00e3o use root na aplica\u00e7\u00e3o\" href=\"#n%C3%A3o-use-root-na-aplica%C3%A7%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O usu\u00e1rio <code>root<\/code> deve ser reservado para administra\u00e7\u00e3o. Uma aplica\u00e7\u00e3o deve possuir uma conta pr\u00f3pria e apenas as permiss\u00f5es necess\u00e1rias.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abra o MySQL Workbench ou o cliente de linha de comando e crie o banco da trilha:<\/p>\n\n\n\n<div class=\"highlight highlight-source-sql\"><pre><span class=\"pl-k\">CREATE<\/span> <span class=\"pl-k\">DATABASE<\/span> <span class=\"pl-en\">php_backend_senior<\/span>\n    CHARACTER <span class=\"pl-k\">SET<\/span> utf8mb4\n    COLLATE utf8mb4_0900_ai_ci;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Crie um usu\u00e1rio exclusivo:<\/p>\n\n\n\n<div class=\"highlight highlight-source-sql\"><pre><span class=\"pl-k\">CREATE<\/span> <span class=\"pl-k\">USER<\/span> '<span class=\"pl-en\">php_app<\/span>'@<span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>localhost<span class=\"pl-pds\">'<\/span><\/span>\nIDENTIFIED BY <span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>SUBSTITUA_POR_UMA_SENHA_FORTE<span class=\"pl-pds\">'<\/span><\/span>;\n\n<span class=\"pl-k\">GRANT<\/span> ALL PRIVILEGES\n<span class=\"pl-k\">ON<\/span> php_backend_senior.<span class=\"pl-k\">*<\/span>\nTO <span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>php_app<span class=\"pl-pds\">'<\/span><\/span>@<span class=\"pl-s\"><span class=\"pl-pds\">'<\/span>localhost<span class=\"pl-pds\">'<\/span><\/span>;\n\nFLUSH PRIVILEGES;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A senha acima \u00e9 apenas um marcador. N\u00e3o use esse texto literalmente e nunca envie credenciais para o Git.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verifique o cliente pelo terminal:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>mysql <span class=\"pl-k\">--<\/span>version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se o comando n\u00e3o for encontrado, adicione ao <code>PATH<\/code> a pasta que cont\u00e9m <code>mysql.exe<\/code>. O servidor e o Workbench podem estar funcionando mesmo quando o cliente ainda n\u00e3o est\u00e1 no <code>PATH<\/code>.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"7_Criar_o_primeiro_projeto_PHP\"><\/span>7. Criar o primeiro projeto PHP<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-7-criar-o-primeiro-projeto-php\" class=\"anchor\" aria-label=\"Permalink: 7. Criar o primeiro projeto PHP\" href=\"#7-criar-o-primeiro-projeto-php\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Utilizaremos a pasta <code>dev<\/code> dentro do diret\u00f3rio do usu\u00e1rio. Isso evita depender de uma letra de unidade ou de um nome de usu\u00e1rio espec\u00edfico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No PowerShell:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre><span class=\"pl-c1\">New-Item<\/span> <span class=\"pl-k\">-<\/span>ItemType Directory <span class=\"pl-k\">-<\/span>Force <span class=\"pl-k\">-<\/span>Path <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span><span class=\"pl-c1\">$HOME<\/span>\\dev\\php-backend-senior<span class=\"pl-pds\">\"<\/span><\/span>\n<span class=\"pl-c1\">Set-Location<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span><span class=\"pl-c1\">$HOME<\/span>\\dev\\php-backend-senior<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c1\">New-Item<\/span> <span class=\"pl-k\">-<\/span>ItemType Directory <span class=\"pl-k\">-<\/span>Force <span class=\"pl-k\">-<\/span>Path <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>public<span class=\"pl-pds\">\"<\/span><\/span>\n<span class=\"pl-c1\">New-Item<\/span> <span class=\"pl-k\">-<\/span>ItemType Directory <span class=\"pl-k\">-<\/span>Force <span class=\"pl-k\">-<\/span>Path <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>src<span class=\"pl-pds\">\"<\/span><\/span>\n<span class=\"pl-c1\">New-Item<\/span> <span class=\"pl-k\">-<\/span>ItemType Directory <span class=\"pl-k\">-<\/span>Force <span class=\"pl-k\">-<\/span>Path <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>tests<span class=\"pl-pds\">\"<\/span><\/span>\n\ncode .<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A estrutura inicial ser\u00e1:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php-backend-senior\/\n\u251c\u2500\u2500 public\/\n\u251c\u2500\u2500 src\/\n\u2514\u2500\u2500 tests\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cada pasta ter\u00e1 uma responsabilidade:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><code>public<\/code>: ponto de entrada acess\u00edvel pelo navegador;<\/li>\n\n\n\n<li><br><code>src<\/code>: classes da aplica\u00e7\u00e3o;<\/li>\n\n\n\n<li><br><code>tests<\/code>: testes automatizados que ser\u00e3o adicionados posteriormente.<\/li>\n<\/ul>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"8_Configurar_o_Composer_e_o_autoload_PSR-4\"><\/span>8. Configurar o Composer e o autoload PSR-4<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-8-configurar-o-composer-e-o-autoload-psr-4\" class=\"anchor\" aria-label=\"Permalink: 8. Configurar o Composer e o autoload PSR-4\" href=\"#8-configurar-o-composer-e-o-autoload-psr-4\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Na raiz do projeto, crie o arquivo <code>composer.json<\/code>:<\/p>\n\n\n\n<div class=\"highlight highlight-source-json\"><pre>{\n    <span class=\"pl-ent\">\"name\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>seu-usuario\/php-backend-senior<span class=\"pl-pds\">\"<\/span><\/span>,\n    <span class=\"pl-ent\">\"description\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>Trilha pr\u00e1tica de prepara\u00e7\u00e3o para vagas PHP Back-End<span class=\"pl-pds\">\"<\/span><\/span>,\n    <span class=\"pl-ent\">\"type\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>project<span class=\"pl-pds\">\"<\/span><\/span>,\n    <span class=\"pl-ent\">\"require\"<\/span>: {\n        <span class=\"pl-ent\">\"php\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>&gt;=8.4 &lt;9.0<span class=\"pl-pds\">\"<\/span><\/span>\n    },\n    <span class=\"pl-ent\">\"autoload\"<\/span>: {\n        <span class=\"pl-ent\">\"psr-4\"<\/span>: {\n            <span class=\"pl-ent\">\"App<span class=\"pl-cce\">\\\\<\/span>\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>src\/<span class=\"pl-pds\">\"<\/span><\/span>\n        }\n    }\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Substitua <code>seu-usuario<\/code> pelo nome utilizado em seu GitHub ou por outro identificador v\u00e1lido no formato esperado pelo Composer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>composer install<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O Composer criar\u00e1:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>composer.lock\nvendor\/\nvendor\/autoload.php\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_e_PSR-4\"><\/span>O que \u00e9 PSR-4?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-\u00e9-psr-4\" class=\"anchor\" aria-label=\"Permalink: O que \u00e9 PSR-4?\" href=\"#o-que-%C3%A9-psr-4\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">PSR-4 \u00e9 um padr\u00e3o de autoload para classes PHP. Nesta configura\u00e7\u00e3o:<\/p>\n\n\n\n<div class=\"highlight highlight-source-json\"><pre><span class=\"pl-ent\">\"App<span class=\"pl-cce\">\\\\<\/span>\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>src\/<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">estamos informando que classes cujo namespace come\u00e7a com <code>App\\<\/code> ser\u00e3o procuradas dentro da pasta <code>src<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Classe: App\\EnvironmentCheck\nArquivo: src\/EnvironmentCheck.php\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sem autoload, seria necess\u00e1rio espalhar v\u00e1rios comandos <code>require<\/code> e <code>include<\/code> pela aplica\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"9_Criar_uma_classe_de_diagnostico\"><\/span>9. Criar uma classe de diagn\u00f3stico<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-9-criar-uma-classe-de-diagn\u00f3stico\" class=\"anchor\" aria-label=\"Permalink: 9. Criar uma classe de diagn\u00f3stico\" href=\"#9-criar-uma-classe-de-diagn%C3%B3stico\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Crie o arquivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>src\/EnvironmentCheck.php\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Adicione:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-ent\">&lt;?php<\/span>\n\n<span class=\"pl-k\">declare<\/span>(strict_types=<span class=\"pl-c1\">1<\/span>);\n\n<span class=\"pl-k\">namespace<\/span> <span class=\"pl-v\">App<\/span>;\n\n<span class=\"pl-k\">final<\/span> <span class=\"pl-k\">class<\/span> EnvironmentCheck\n{\n    <span class=\"pl-c\">\/**<\/span>\n<span class=\"pl-c\">     * @return array&lt;string, mixed&gt;<\/span>\n<span class=\"pl-c\">     *\/<\/span>\n    <span class=\"pl-k\">public<\/span> <span class=\"pl-k\">static<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">report<\/span>(): <span class=\"pl-smi\">array<\/span>\n    {\n        <span class=\"pl-k\">return<\/span> [\n            <span class=\"pl-s\">'<span class=\"pl-s\">php_version<\/span>'<\/span> =&gt; <span class=\"pl-c1\">PHP_VERSION<\/span>,\n            <span class=\"pl-s\">'<span class=\"pl-s\">sapi<\/span>'<\/span> =&gt; <span class=\"pl-c1\">PHP_SAPI<\/span>,\n            <span class=\"pl-s\">'<span class=\"pl-s\">operating_system<\/span>'<\/span> =&gt; <span class=\"pl-c1\">PHP_OS_FAMILY<\/span>,\n            <span class=\"pl-s\">'<span class=\"pl-s\">timezone<\/span>'<\/span> =&gt; <span class=\"pl-en\">date_default_timezone_get<\/span>(),\n            <span class=\"pl-s\">'<span class=\"pl-s\">generated_at<\/span>'<\/span> =&gt; <span class=\"pl-en\">date<\/span>(<span class=\"pl-c1\">DATE_ATOM<\/span>),\n            <span class=\"pl-s\">'<span class=\"pl-s\">extensions<\/span>'<\/span> =&gt; [\n                <span class=\"pl-s\">'<span class=\"pl-s\">curl<\/span>'<\/span> =&gt; <span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">curl<\/span>'<\/span>),\n                <span class=\"pl-s\">'<span class=\"pl-s\">fileinfo<\/span>'<\/span> =&gt; <span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">fileinfo<\/span>'<\/span>),\n                <span class=\"pl-s\">'<span class=\"pl-s\">mbstring<\/span>'<\/span> =&gt; <span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">mbstring<\/span>'<\/span>),\n                <span class=\"pl-s\">'<span class=\"pl-s\">openssl<\/span>'<\/span> =&gt; <span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">openssl<\/span>'<\/span>),\n                <span class=\"pl-s\">'<span class=\"pl-s\">pdo<\/span>'<\/span> =&gt; <span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">pdo<\/span>'<\/span>),\n                <span class=\"pl-s\">'<span class=\"pl-s\">pdo_mysql<\/span>'<\/span> =&gt; <span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">pdo_mysql<\/span>'<\/span>),\n                <span class=\"pl-s\">'<span class=\"pl-s\">zip<\/span>'<\/span> =&gt; <span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">zip<\/span>'<\/span>),\n            ],\n        ];\n    }\n}<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Entendendo_a_classe\"><\/span>Entendendo a classe<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-entendendo-a-classe\" class=\"anchor\" aria-label=\"Permalink: Entendendo a classe\" href=\"#entendendo-a-classe\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A instru\u00e7\u00e3o:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-k\">declare<\/span>(strict_types=<span class=\"pl-c1\">1<\/span>);<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">ativa um comportamento mais rigoroso para tipos escalares nas chamadas realizadas a partir daquele arquivo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O namespace:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-k\">namespace<\/span> <span class=\"pl-v\">App<\/span>;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">corresponde ao prefixo configurado no <code>composer.json<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A declara\u00e7\u00e3o:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-k\">final<\/span> <span class=\"pl-k\">class<\/span> EnvironmentCheck<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">impede que a classe seja herdada. Isso n\u00e3o \u00e9 obrigat\u00f3rio para todas as classes. Neste caso, comunica que a classe foi criada como utilit\u00e1rio fechado, sem extens\u00e3o por heran\u00e7a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A fun\u00e7\u00e3o:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-en\">extension_loaded<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">pdo_mysql<\/span>'<\/span>)<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">verifica se a extens\u00e3o necess\u00e1ria para conectar PHP e MySQL por PDO est\u00e1 ativa.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"10_Criar_o_ponto_de_entrada_da_aplicacao\"><\/span>10. Criar o ponto de entrada da aplica\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-10-criar-o-ponto-de-entrada-da-aplica\u00e7\u00e3o\" class=\"anchor\" aria-label=\"Permalink: 10. Criar o ponto de entrada da aplica\u00e7\u00e3o\" href=\"#10-criar-o-ponto-de-entrada-da-aplica%C3%A7%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Crie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public\/index.php\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Adicione:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-ent\">&lt;?php<\/span>\n\n<span class=\"pl-k\">declare<\/span>(strict_types=<span class=\"pl-c1\">1<\/span>);\n\n<span class=\"pl-k\">use<\/span> <span class=\"pl-v\">App<\/span>\\<span class=\"pl-smi\">EnvironmentCheck<\/span>;\n\n<span class=\"pl-k\">require<\/span> <span class=\"pl-en\">dirname<\/span>(<span class=\"pl-c1\">__DIR__<\/span>) . <span class=\"pl-s\">'<span class=\"pl-s\">\/vendor\/autoload.php<\/span>'<\/span>;\n\n<span class=\"pl-en\">header<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">Content-Type: application\/json; charset=utf-8<\/span>'<\/span>);\n\n<span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>environment<\/span> = EnvironmentCheck::<span class=\"pl-en\">report<\/span>();\n<span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>pdoMySqlAvailable<\/span> = <span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>environment<\/span>[<span class=\"pl-s\">'<span class=\"pl-s\">extensions<\/span>'<\/span>][<span class=\"pl-s\">'<span class=\"pl-s\">pdo_mysql<\/span>'<\/span>] === <span class=\"pl-c1\">true<\/span>;\n\n<span class=\"pl-k\">if<\/span> (!<span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>pdoMySqlAvailable<\/span>) {\n    <span class=\"pl-en\">http_response_code<\/span>(<span class=\"pl-c1\">500<\/span>);\n}\n\n<span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>response<\/span> = [\n    <span class=\"pl-s\">'<span class=\"pl-s\">status<\/span>'<\/span> =&gt; <span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>pdoMySqlAvailable<\/span> ? <span class=\"pl-s\">'<span class=\"pl-s\">ok<\/span>'<\/span> : <span class=\"pl-s\">'<span class=\"pl-s\">error<\/span>'<\/span>,\n    <span class=\"pl-s\">'<span class=\"pl-s\">message<\/span>'<\/span> =&gt; <span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>pdoMySqlAvailable<\/span>\n        ? <span class=\"pl-s\">'<span class=\"pl-s\">Ambiente PHP configurado com sucesso.<\/span>'<\/span>\n        : <span class=\"pl-s\">'<span class=\"pl-s\">A extens\u00e3o pdo_mysql n\u00e3o est\u00e1 habilitada.<\/span>'<\/span>,\n    <span class=\"pl-s\">'<span class=\"pl-s\">environment<\/span>'<\/span> =&gt; <span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>environment<\/span>,\n];\n\n<span class=\"pl-k\">echo<\/span> <span class=\"pl-en\">json_encode<\/span>(\n    <span class=\"pl-s1\"><span class=\"pl-c1\">$<\/span>response<\/span>,\n    <span class=\"pl-c1\">JSON_PRETTY_PRINT<\/span>\n    | <span class=\"pl-c1\">JSON_UNESCAPED_UNICODE<\/span>\n    | <span class=\"pl-c1\">JSON_THROW_ON_ERROR<\/span>\n);<\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Carregamento_automatico_das_classes\"><\/span>Carregamento autom\u00e1tico das classes<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-carregamento-autom\u00e1tico-das-classes\" class=\"anchor\" aria-label=\"Permalink: Carregamento autom\u00e1tico das classes\" href=\"#carregamento-autom%C3%A1tico-das-classes\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Esta linha carrega o arquivo gerado pelo Composer:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-k\">require<\/span> <span class=\"pl-en\">dirname<\/span>(<span class=\"pl-c1\">__DIR__<\/span>) . <span class=\"pl-s\">'<span class=\"pl-s\">\/vendor\/autoload.php<\/span>'<\/span>;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Depois disso, a classe <code>App\\EnvironmentCheck<\/code> pode ser utilizada sem um <code>require<\/code> espec\u00edfico para o arquivo dela.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Cabecalho_da_resposta\"><\/span>Cabe\u00e7alho da resposta<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-cabe\u00e7alho-da-resposta\" class=\"anchor\" aria-label=\"Permalink: Cabe\u00e7alho da resposta\" href=\"#cabe%C3%A7alho-da-resposta\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A linha:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-en\">header<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">Content-Type: application\/json; charset=utf-8<\/span>'<\/span>);<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">informa ao cliente que a resposta cont\u00e9m JSON codificado em UTF-8.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Status_HTTP\"><\/span>Status HTTP<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-status-http\" class=\"anchor\" aria-label=\"Permalink: Status HTTP\" href=\"#status-http\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Quando <code>pdo_mysql<\/code> n\u00e3o est\u00e1 dispon\u00edvel, o c\u00f3digo executa:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-en\">http_response_code<\/span>(<span class=\"pl-c1\">500<\/span>);<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O status HTTP 500 informa que o servidor n\u00e3o conseguiu atender corretamente \u00e0 requisi\u00e7\u00e3o. Em APIs profissionais, o status HTTP e o corpo JSON precisam representar a mesma situa\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"11_Executar_o_servidor_local\"><\/span>11. Executar o servidor local<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-11-executar-o-servidor-local\" class=\"anchor\" aria-label=\"Permalink: 11. Executar o servidor local\" href=\"#11-executar-o-servidor-local\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Na raiz do projeto, execute:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>php <span class=\"pl-k\">-<\/span>S localhost:<span class=\"pl-c1\">8000<\/span> <span class=\"pl-k\">-<\/span>t public<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Abra no navegador:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;localhost:8000\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O resultado dever\u00e1 ser semelhante a:<\/p>\n\n\n\n<div class=\"highlight highlight-source-json\"><pre>{\n    <span class=\"pl-ent\">\"status\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>ok<span class=\"pl-pds\">\"<\/span><\/span>,\n    <span class=\"pl-ent\">\"message\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>Ambiente PHP configurado com sucesso.<span class=\"pl-pds\">\"<\/span><\/span>,\n    <span class=\"pl-ent\">\"environment\"<\/span>: {\n        <span class=\"pl-ent\">\"php_version\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>8.x.x<span class=\"pl-pds\">\"<\/span><\/span>,\n        <span class=\"pl-ent\">\"sapi\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>cli-server<span class=\"pl-pds\">\"<\/span><\/span>,\n        <span class=\"pl-ent\">\"operating_system\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>Windows<span class=\"pl-pds\">\"<\/span><\/span>,\n        <span class=\"pl-ent\">\"timezone\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>America\/Sao_Paulo<span class=\"pl-pds\">\"<\/span><\/span>,\n        <span class=\"pl-ent\">\"generated_at\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>2026-07-26T12:00:00-03:00<span class=\"pl-pds\">\"<\/span><\/span>,\n        <span class=\"pl-ent\">\"extensions\"<\/span>: {\n            <span class=\"pl-ent\">\"curl\"<\/span>: <span class=\"pl-c1\">true<\/span>,\n            <span class=\"pl-ent\">\"fileinfo\"<\/span>: <span class=\"pl-c1\">true<\/span>,\n            <span class=\"pl-ent\">\"mbstring\"<\/span>: <span class=\"pl-c1\">true<\/span>,\n            <span class=\"pl-ent\">\"openssl\"<\/span>: <span class=\"pl-c1\">true<\/span>,\n            <span class=\"pl-ent\">\"pdo\"<\/span>: <span class=\"pl-c1\">true<\/span>,\n            <span class=\"pl-ent\">\"pdo_mysql\"<\/span>: <span class=\"pl-c1\">true<\/span>,\n            <span class=\"pl-ent\">\"zip\"<\/span>: <span class=\"pl-c1\">true<\/span>\n        }\n    }\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O servidor embutido do PHP \u00e9 apropriado para desenvolvimento e exerc\u00edcios locais. Ele n\u00e3o deve ser usado como servidor p\u00fablico de produ\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para interromp\u00ea-lo, volte ao terminal e pressione:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ctrl + C\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"12_Validar_a_sintaxe_do_codigo\"><\/span>12. Validar a sintaxe do c\u00f3digo<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-12-validar-a-sintaxe-do-c\u00f3digo\" class=\"anchor\" aria-label=\"Permalink: 12. Validar a sintaxe do c\u00f3digo\" href=\"#12-validar-a-sintaxe-do-c%C3%B3digo\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de executar ou versionar os arquivos, use o lint do PHP:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>php <span class=\"pl-k\">-<\/span>l src<span class=\"pl-k\">\/<\/span>EnvironmentCheck.php\nphp <span class=\"pl-k\">-<\/span>l public<span class=\"pl-k\">\/<\/span>index.php<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O resultado esperado \u00e9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>No syntax errors detected\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O comando <code>php -l<\/code> encontra erros de sintaxe, mas n\u00e3o garante que a regra de neg\u00f3cio esteja correta. Mais adiante, adicionaremos an\u00e1lise est\u00e1tica e testes automatizados.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"13_Criar_o_arquivo_gitignore\"><\/span>13. Criar o arquivo .gitignore<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-13-criar-o-arquivo-gitignore\" class=\"anchor\" aria-label=\"Permalink: 13. Criar o arquivo .gitignore\" href=\"#13-criar-o-arquivo-gitignore\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Na raiz, crie <code>.gitignore<\/code>:<\/p>\n\n\n\n<div class=\"highlight highlight-source-gitignore\"><pre>\/<span class=\"pl-e\">vendor<\/span>\/\n\/<span class=\"pl-e\">.idea<\/span>\/\n\/<span class=\"pl-e\">.vscode<\/span>\/\n<span class=\"pl-e\">.env<\/span>\n<span class=\"pl-k\">*<\/span><span class=\"pl-e\">.log<\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A pasta <code>vendor<\/code> n\u00e3o deve ser versionada porque pode ser reconstru\u00edda com:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>composer install<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">J\u00e1 o arquivo <code>composer.lock<\/code> deve ser enviado ao reposit\u00f3rio em projetos de aplica\u00e7\u00e3o. Ele registra as vers\u00f5es exatas instaladas e ajuda a manter ambientes reproduz\u00edveis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Credenciais e segredos devem ficar fora do Git. Quando criarmos a conex\u00e3o com o banco, utilizaremos um arquivo <code>.env<\/code>, que j\u00e1 est\u00e1 ignorado.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"14_Criar_os_primeiros_commits\"><\/span>14. Criar os primeiros commits<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-14-criar-os-primeiros-commits\" class=\"anchor\" aria-label=\"Permalink: 14. Criar os primeiros commits\" href=\"#14-criar-os-primeiros-commits\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Inicialize o reposit\u00f3rio:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>git init\ngit add .\ngit status\ngit commit <span class=\"pl-k\">-<\/span>m <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>chore: configura ambiente inicial PHP<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Confira o hist\u00f3rico:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>git log <span class=\"pl-k\">--<\/span>oneline<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O commit deve representar uma altera\u00e7\u00e3o coerente. Evite mensagens vagas como <code>altera\u00e7\u00f5es<\/code>, <code>teste<\/code> ou <code>arquivos novos<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um padr\u00e3o simples para mensagens \u00e9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tipo: descri\u00e7\u00e3o objetiva\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chore: configura ambiente inicial PHP\nfeat: adiciona diagn\u00f3stico das extens\u00f5es\nfix: trata aus\u00eancia da extens\u00e3o pdo_mysql\n<\/code><\/pre>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Exercicio_guiado\"><\/span>Exerc\u00edcio guiado<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-exerc\u00edcio-guiado\" class=\"anchor\" aria-label=\"Permalink: Exerc\u00edcio guiado\" href=\"#exerc%C3%ADcio-guiado\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Adicione ao relat\u00f3rio a quantidade de mem\u00f3ria m\u00e1xima permitida pelo PHP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No m\u00e9todo <code>report()<\/code>, inclua:<\/p>\n\n\n\n<div class=\"highlight highlight-text-html-php\"><pre><span class=\"pl-s\">'<span class=\"pl-s\">memory_limit<\/span>'<\/span> =&gt; <span class=\"pl-en\">ini_get<\/span>(<span class=\"pl-s\">'<span class=\"pl-s\">memory_limit<\/span>'<\/span>),<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A resposta dever\u00e1 conter algo semelhante a:<\/p>\n\n\n\n<div class=\"highlight highlight-source-json\"><pre><span class=\"pl-ent\">\"memory_limit\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>128M<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Depois:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>valide a sintaxe;<\/li>\n\n\n\n<li>abra a aplica\u00e7\u00e3o no navegador;<\/li>\n\n\n\n<li>confira o novo campo;<\/li>\n\n\n\n<li>fa\u00e7a um commit separado.<\/li>\n<\/ol>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>php <span class=\"pl-k\">-<\/span>l src<span class=\"pl-k\">\/<\/span>EnvironmentCheck.php\ngit add .\ngit commit <span class=\"pl-k\">-<\/span>m <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>feat: adiciona limite de mem\u00f3ria ao diagn\u00f3stico<span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Desafio_da_licao\"><\/span>Desafio da li\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-desafio-da-li\u00e7\u00e3o\" class=\"anchor\" aria-label=\"Permalink: Desafio da li\u00e7\u00e3o\" href=\"#desafio-da-li%C3%A7%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Adicione uma propriedade chamada <code>ready<\/code> \u00e0 resposta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ela dever\u00e1 ser:<\/p>\n\n\n\n<div class=\"highlight highlight-source-json\"><pre><span class=\"pl-ent\">\"ready\"<\/span>: <span class=\"pl-c1\">true<\/span><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">somente quando todas estas extens\u00f5es estiverem habilitadas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><code>curl<\/code>;<\/li>\n\n\n\n<li><br><code>mbstring<\/code>;<\/li>\n\n\n\n<li><br><code>openssl<\/code>;<\/li>\n\n\n\n<li><br><code>pdo<\/code>;<\/li>\n\n\n\n<li><br><code>pdo_mysql<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Caso uma delas esteja ausente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><br><code>ready<\/code> dever\u00e1 ser <code>false<\/code>;<\/li>\n\n\n\n<li><br><code>status<\/code> dever\u00e1 ser <code>error<\/code>;<\/li>\n\n\n\n<li>a resposta dever\u00e1 utilizar HTTP 500;<\/li>\n\n\n\n<li>o JSON dever\u00e1 informar quais extens\u00f5es est\u00e3o ausentes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Uma sa\u00edda poss\u00edvel \u00e9:<\/p>\n\n\n\n<div class=\"highlight highlight-source-json\"><pre>{\n    <span class=\"pl-ent\">\"status\"<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>error<span class=\"pl-pds\">\"<\/span><\/span>,\n    <span class=\"pl-ent\">\"ready\"<\/span>: <span class=\"pl-c1\">false<\/span>,\n    <span class=\"pl-ent\">\"missing_extensions\"<\/span>: [\n        <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>pdo_mysql<span class=\"pl-pds\">\"<\/span><\/span>\n    ]\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tente resolver o desafio sem copiar uma implementa\u00e7\u00e3o pronta. O objetivo \u00e9 praticar arrays, condi\u00e7\u00f5es e constru\u00e7\u00e3o de respostas HTTP.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Perguntas_comuns_em_entrevistas_PHP\"><\/span>Perguntas comuns em entrevistas PHP<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-perguntas-comuns-em-entrevistas-php\" class=\"anchor\" aria-label=\"Permalink: Perguntas comuns em entrevistas PHP\" href=\"#perguntas-comuns-em-entrevistas-php\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Qual_e_a_diferenca_entre_PHP_e_Composer\"><\/span>Qual \u00e9 a diferen\u00e7a entre PHP e Composer?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-qual-\u00e9-a-diferen\u00e7a-entre-php-e-composer\" class=\"anchor\" aria-label=\"Permalink: Qual \u00e9 a diferen\u00e7a entre PHP e Composer?\" href=\"#qual-%C3%A9-a-diferen%C3%A7a-entre-php-e-composer\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">PHP \u00e9 a linguagem e o ambiente de execu\u00e7\u00e3o. Composer \u00e9 uma ferramenta que gerencia bibliotecas, vers\u00f5es e autoload.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Para_que_serve_o_phpini\"><\/span>Para que serve o php.ini?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-para-que-serve-o-phpini\" class=\"anchor\" aria-label=\"Permalink: Para que serve o php.ini?\" href=\"#para-que-serve-o-phpini\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O <code>php.ini<\/code> controla o comportamento do PHP. Ele permite configurar extens\u00f5es, fuso hor\u00e1rio, limites de mem\u00f3ria, upload, exibi\u00e7\u00e3o de erros e outras op\u00e7\u00f5es.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_e_uma_extensao_PHP\"><\/span>O que \u00e9 uma extens\u00e3o PHP?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-\u00e9-uma-extens\u00e3o-php\" class=\"anchor\" aria-label=\"Permalink: O que \u00e9 uma extens\u00e3o PHP?\" href=\"#o-que-%C3%A9-uma-extens%C3%A3o-php\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 um m\u00f3dulo que adiciona funcionalidades ao runtime. Exemplos incluem conex\u00e3o com bancos, criptografia, compacta\u00e7\u00e3o e manipula\u00e7\u00e3o avan\u00e7ada de texto.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_faz_declarestrict_types1\"><\/span>O que faz declare(strict_types=1)?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-faz-declarestrict_types1\" class=\"anchor\" aria-label=\"Permalink: O que faz declare(strict_types=1)?\" href=\"#o-que-faz-declarestrict_types1\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ele torna mais rigorosa a coer\u00e7\u00e3o de tipos escalares nas chamadas feitas a partir daquele arquivo. N\u00e3o transforma o PHP inteiro em uma linguagem de tipagem estrita e n\u00e3o substitui testes ou an\u00e1lise est\u00e1tica.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Para_que_serve_o_autoload\"><\/span>Para que serve o autoload?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-para-que-serve-o-autoload\" class=\"anchor\" aria-label=\"Permalink: Para que serve o autoload?\" href=\"#para-que-serve-o-autoload\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O autoload encontra e carrega classes quando elas s\u00e3o utilizadas, reduzindo a necessidade de incluir manualmente cada arquivo.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_que_e_PSR-4-2\"><\/span>O que \u00e9 PSR-4?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-que-\u00e9-psr-4-1\" class=\"anchor\" aria-label=\"Permalink: O que \u00e9 PSR-4?\" href=\"#o-que-%C3%A9-psr-4-1\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 uma especifica\u00e7\u00e3o que relaciona namespaces a diret\u00f3rios e nomes de arquivos. Ela \u00e9 amplamente usada pelo Composer.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"O_servidor_php_-S_pode_ser_usado_em_producao\"><\/span>O servidor php -S pode ser usado em produ\u00e7\u00e3o?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-o-servidor-php--s-pode-ser-usado-em-produ\u00e7\u00e3o\" class=\"anchor\" aria-label=\"Permalink: O servidor php -S pode ser usado em produ\u00e7\u00e3o?\" href=\"#o-servidor-php--s-pode-ser-usado-em-produ%C3%A7%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o. Ele foi criado para desenvolvimento e testes locais, sem os recursos necess\u00e1rios para operar como servidor p\u00fablico de produ\u00e7\u00e3o.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Por_que_uma_aplicacao_nao_deve_acessar_o_MySQL_como_root\"><\/span>Por que uma aplica\u00e7\u00e3o n\u00e3o deve acessar o MySQL como root?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-por-que-uma-aplica\u00e7\u00e3o-n\u00e3o-deve-acessar-o-mysql-como-root\" class=\"anchor\" aria-label=\"Permalink: Por que uma aplica\u00e7\u00e3o n\u00e3o deve acessar o MySQL como root?\" href=\"#por-que-uma-aplica%C3%A7%C3%A3o-n%C3%A3o-deve-acessar-o-mysql-como-root\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Porque o princ\u00edpio do menor privil\u00e9gio determina que cada aplica\u00e7\u00e3o receba somente as permiss\u00f5es necess\u00e1rias. Uma credencial administrativa aumenta o impacto de falhas e invas\u00f5es.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h3 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Qual_e_a_diferenca_entre_mysqli_e_PDO\"><\/span>Qual \u00e9 a diferen\u00e7a entre mysqli e PDO?<span class=\"ez-toc-section-end\"><\/span><\/h3><a id=\"user-content-qual-\u00e9-a-diferen\u00e7a-entre-mysqli-e-pdo\" class=\"anchor\" aria-label=\"Permalink: Qual \u00e9 a diferen\u00e7a entre mysqli e PDO?\" href=\"#qual-%C3%A9-a-diferen%C3%A7a-entre-mysqli-e-pdo\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">MySQLi \u00e9 voltada ao MySQL. PDO oferece uma interface consistente para diferentes bancos suportados por drivers. Nesta trilha, utilizaremos principalmente PDO com prepared statements.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Checklist_de_conclusao\"><\/span>Checklist de conclus\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-checklist-de-conclus\u00e3o\" class=\"anchor\" aria-label=\"Permalink: Checklist de conclus\u00e3o\" href=\"#checklist-de-conclus%C3%A3o\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Considere a configura\u00e7\u00e3o do <strong>ambiente PHP no Windows<\/strong> conclu\u00edda quando estes comandos funcionarem:<\/p>\n\n\n\n<div class=\"highlight highlight-source-powershell\"><pre>php <span class=\"pl-k\">-<\/span>v\nphp <span class=\"pl-k\">--<\/span>ini\ncomposer <span class=\"pl-k\">--<\/span>version\ncomposer diagnose\ngit <span class=\"pl-k\">--<\/span>version\nmysql <span class=\"pl-k\">--<\/span>version\ncode <span class=\"pl-k\">--<\/span>version<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tamb\u00e9m confirme que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>o PHP carrega o <code>php.ini<\/code> esperado;<\/li>\n\n\n\n<li>as extens\u00f5es importantes aparecem em <code>php -m<\/code>;<\/li>\n\n\n\n<li><br><code>composer install<\/code> cria a pasta <code>vendor<\/code>;<\/li>\n\n\n\n<li>o autoload encontra <code>App\\EnvironmentCheck<\/code>;<\/li>\n\n\n\n<li><br><code>php -S localhost:8000 -t public<\/code> inicia o servidor;<\/li>\n\n\n\n<li>o navegador recebe JSON;<\/li>\n\n\n\n<li>o campo <code>status<\/code> apresenta <code>ok<\/code>;<\/li>\n\n\n\n<li>os arquivos passam pelo comando <code>php -l<\/code>;<\/li>\n\n\n\n<li>o projeto possui ao menos um commit Git.<\/li>\n<\/ul>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Proximos_passos\"><\/span>Pr\u00f3ximos passos<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-pr\u00f3ximos-passos\" class=\"anchor\" aria-label=\"Permalink: Pr\u00f3ximos passos\" href=\"#pr%C3%B3ximos-passos\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Com o ambiente pronto, a pr\u00f3xima li\u00e7\u00e3o pode avan\u00e7ar para o funcionamento de uma aplica\u00e7\u00e3o web:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cliente e servidor;<\/li>\n\n\n\n<li>requisi\u00e7\u00f5es e respostas;<\/li>\n\n\n\n<li>HTTP e HTTPS;<\/li>\n\n\n\n<li>m\u00e9todos GET, POST, PUT, PATCH e DELETE;<\/li>\n\n\n\n<li>cabe\u00e7alhos;<\/li>\n\n\n\n<li>cookies;<\/li>\n\n\n\n<li>sess\u00f5es;<\/li>\n\n\n\n<li>c\u00f3digos de status HTTP.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Essa base ser\u00e1 usada posteriormente na cria\u00e7\u00e3o de formul\u00e1rios, autentica\u00e7\u00e3o, APIs REST e integra\u00e7\u00f5es entre PHP, MySQL e interfaces desenvolvidas com Bootstrap e jQuery.<\/p>\n\n\n\n<div class=\"markdown-heading\"><h2 class=\"heading-element\"><span class=\"ez-toc-section\" id=\"Referencias_oficiais\"><\/span>Refer\u00eancias oficiais<span class=\"ez-toc-section-end\"><\/span><\/h2><a id=\"user-content-refer\u00eancias-oficiais\" class=\"anchor\" aria-label=\"Permalink: Refer\u00eancias oficiais\" href=\"#refer%C3%AAncias-oficiais\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.php.net\/supported-versions.php\" target=\"_blank\" rel=\"noopener\">Vers\u00f5es do PHP com suporte<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/pt_BR\/install.windows.manual.php\" target=\"_blank\" rel=\"noopener\">Instala\u00e7\u00e3o manual do PHP no Windows<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/pt_BR\/install.windows.commandline.php\" target=\"_blank\" rel=\"noopener\">PHP no terminal do Windows<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/pt_BR\/features.commandline.webserver.php\" target=\"_blank\" rel=\"noopener\">Servidor web embutido do PHP<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/getcomposer.org\/doc\/00-intro.md\" target=\"_blank\" rel=\"noopener\">Instala\u00e7\u00e3o do Composer<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener\">Especifica\u00e7\u00e3o PSR-4<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/git-scm.com\/install\/windows\" target=\"_blank\" rel=\"noopener\">Git para Windows<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.4\/en\/windows-installation.html\" target=\"_blank\" rel=\"noopener\">Instala\u00e7\u00e3o do MySQL no Windows<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/como-aprender-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">Como Aprender PHP do Zero: Guia Completo para Iniciantes<\/a><\/li>\n<\/ul>\n\n\n    <article class=\"aabp-card aabp-style-card\">\n                            <a href=\"https:\/\/link.amazon\/B0b1mDElZ\" target=\"_blank\" rel=\"nofollow sponsored noopener\" class=\"aabp-image\">\n                <img decoding=\"async\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2026\/07\/91DekQEWHLL._SL1500_1.jpg\" alt=\"Construindo uma Aplica\u00e7\u00e3o Web Completa com PHP e MySQL\" loading=\"lazy\">\n            <\/a>\n                <div class=\"aabp-content\">\n            <h3><span class=\"ez-toc-section\" id=\"Construindo_uma_Aplicacao_Web_Completa_com_PHP_e_MySQL\"><\/span>Construindo uma Aplica\u00e7\u00e3o Web Completa com PHP e MySQL<span class=\"ez-toc-section-end\"><\/span><\/h3>\n            <div class=\"aabp-rating\">\u2b50 4.4\/5<\/div>            <p>Construindo uma Aplica\u00e7\u00e3o Web Completa com PHP e MySQL. Produto recomendado para estudos, programa\u00e7\u00e3o e produtividade.<\/p>            <div class=\"aabp-price-row\">\n                                <strong class=\"aabp-price\">R$ 87,20<\/strong>            <\/div>\n            <a class=\"aabp-button\" href=\"https:\/\/link.amazon\/B0b1mDElZ\" target=\"_blank\" rel=\"nofollow sponsored noopener\">Ver na Amazon<\/a>\n            <small class=\"aabp-disclaimer\">Como afiliado, posso receber comiss\u00e3o por compras qualificadas.<\/small>\n        <\/div>\n    <\/article>\n    \n","protected":false},"excerpt":{"rendered":"<p>Um guia pr\u00e1tico para instalar e validar PHP, Composer, MySQL, Git e VS Code no Windows, criar um projeto com autoload PSR-4 e executar uma aplica\u00e7\u00e3o que responde em JSON.<\/p>\n","protected":false},"author":1,"featured_media":1536,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[85],"tags":[605,606,72,382,238,608,607],"class_list":["post-1535","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php","tag-back-end","tag-composer","tag-git","tag-mysql","tag-php","tag-visual-studio-code","tag-windows"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1535"}],"version-history":[{"count":2,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1535\/revisions"}],"predecessor-version":[{"id":1540,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1535\/revisions\/1540"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/1536"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}