<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ PHP - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ PHP - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 26 May 2026 04:21:31 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/php/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ O manual do PHP – Guia para iniciantes em PHP ]]>
                </title>
                <description>
                    <![CDATA[ PHP é uma linguagem de programação incrivelmente popular. As estatísticas dizem que ele é usado por 80% de todos os sites da web. E é a linguagem por trás do WordPress, o sistema de gerenciamento de conteúdo mais utilizado para sites. Ele também é a base de muitos frameworks diferentes ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/</link>
                <guid isPermaLink="false">62c8ecc68e388806e97fb481</guid>
                
                    <category>
                        <![CDATA[ PHP ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Sun, 31 Jul 2022 23:45:54 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Group-13--2--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-php-handbook/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">https://www.freecodecamp.org/news/the-php-handbook/</a>
      </p><p>PHP é uma linguagem de programação incrivelmente popular.</p><p>As estatísticas dizem que ele é usado por 80% de todos os sites da web. E é a linguagem por trás do WordPress, o sistema de gerenciamento de conteúdo mais utilizado para sites.</p><p>Ele também é a base de muitos frameworks diferentes que facilitam o desenvolvimento para a web, como o Laravel. Falando em Laravel, ele pode ser uma das razões mais convincentes para se aprender PHP nos dias de hoje.</p><h2 id="por-que-aprender-php"><strong>Por que aprender PHP?</strong></h2><p>PHP é uma linguagem muito polarizadora. Algumas pessoas a adoram, enquanto outras a odeiam. Se, porém, deixarmos as emoções de lado e olharmos para a linguagem como uma ferramenta, o PHP tem muito a oferecer.</p><p>Claro que ele não é perfeito, mas saiba que nenhuma linguagem é.</p><p>Neste manual, vou ajudar você a aprender PHP.</p><p>Este manual é uma introdução perfeita se você é novo na linguagem. Ele também é ótimo se você já "mexeu um pouco" com o PHP no passado e quer voltar a ele.</p><p>Explicarei aqui o PHP moderno, na sua versão 8+.</p><p>Ele evoluiu muito nos últimos anos. Então, se a última vez que você trabalhou nele foi com o PHP 5 ou mesmo com o PHP 4, ficará surpreso com todas as novidades que o PHP oferece agora.</p><p>Vamos lá!</p><p>Aqui está o que abordaremos neste manual:</p><ol><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#introdu-o-ao-php">Introdução ao PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#mas-que-tipo-de-linguagem-o-php">Mas que tipo de linguagem é o PHP?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-configurar-o-php">Como configurar o PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-escrever-seu-primeiro-programa-php">Como escrever seu primeiro programa PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#fundamentos-da-linguagem-php">Fundamentos da linguagem PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-trabalhar-com-strings-no-php">Como trabalhar com strings no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-usar-fun-es-internas-para-n-meros-no-php">Como usar funções internas para números no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-os-arrays-funcionam-no-php">Como os arrays funcionam no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-funcionam-as-condicionais-no-php">Como funcionam as condicionais no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-os-la-os-funcionam-no-php">Como os laços funcionam no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-agem-as-fun-es-no-php">Como agem as funções no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-fazer-um-la-o-atrav-s-de-arrays-com-map-filter-e-reduce-no-php">Como fazer um laço através de arrays com <code>map()</code>, <code>filter()</code>e <code>reduce()</code> no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#programa-o-orientada-a-objetos-no-php">Programação Orientada a Objetos no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-incluir-outros-arquivos-php">Como incluir outros arquivos PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#constantes-fun-es-e-vari-veis-teis-para-sistema-de-arquivos-no-php">Constantes, funções e variáveis ​​úteis para sistema de arquivos no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-lidar-com-erros-no-php">Como lidar com erros no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-lidar-com-exce-es-no-php">Como lidar com exceções no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-trabalhar-com-datas-no-php">Como trabalhar com datas no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-usar-constantes-e-enums-no-php">Como usar constantes e enums no PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-usar-o-php-como-uma-plataforma-de-desenvolvimento-de-aplicativos-da-web">Como usar o PHP como uma plataforma de desenvolvimento de aplicativos da web</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-usar-o-composer-e-o-packagist">Como usar o Composer e o Packagist</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#como-fazer-o-deploy-implanta-o-de-um-aplicativo-php">Como fazer o deploy (implantação) de um aplicativo PHP</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/o-manual-do-php-guia-para-iniciantes-em-php/#conclus-o">Conclusão</a></li></ol><p>Você também pode ter uma versão desse manual, em inglês, em <a href="https://thevalleyofcode.com/download/php/">PDF, ePub ou Mobi</a>, para uma fácil referência ou para ler no seu Kindle ou tablet.</p><h2 id="introdu-o-ao-php"><strong>Introdução ao PHP</strong></h2><p>O PHP é uma linguagem de programação que muitos desenvolvedores usam para criar aplicativos para a web, entre outras coisas.</p><p>Como linguagem, ele teve um começo humilde. Foi criado em 1994, por Rasmus Lerdorf, para construir seu site pessoal. Ele não sabia na época que se tornaria uma das linguagens de programação mais populares do mundo. Ele se tornou popular em 1997/8, mas explodiu mesmo foi nos anos 2000, quando o PHP 4 chegou.</p><p>Você pode usar o PHP para adicionar um pouco de interatividade a uma página HTML.</p><p>Também se pode usá-lo como o mecanismo de uma aplicação para a web, que cria páginas HTML dinamicamente e as envia para o navegador.</p><p>Ele pode ser escalado para milhões de visualizações de página.</p><p>Você sabia que o Facebook foi desenvolvido em PHP? Já ouviu falar da Wikipédia, do Slack ou do Etsy?</p><h2 id="mas-que-tipo-de-linguagem-o-php"><strong>Mas que tipo de linguagem é o PHP?</strong></h2><p>Vamos usar um pouco de jargão técnico agora.</p><p>As linguagens de programação são divididas em grupos, dependendo de suas características. Por exemplo: se ela é interpretada ou compilada, fraca ou fortemente tipada, de tipagem dinâmica ou estática.</p><p>O PHP é frequentemente chamado de "linguagem de script" e é uma <strong><strong>linguagem interpretada</strong></strong>. Se você já usou linguagens compiladas, como o C, o Go ou o Swift, a principal diferença é você não precisar compilar um programa PHP antes de executá-lo.</p><p>Essas linguagens que citei são linguagens compiladas. O compilador de cada uma delas gera um programa executável que, só então, você consegue executar. É um processo de 2 etapas.</p><p><em><em>O interpretador</em></em> PHP é o responsável por interpretar as instruções escritas em um programa PHP enquanto ele é executado. Requer apenas uma etapa. Você apenas diz ao interpretador para executar o programa, e ele se encarrega do restante. É um fluxo de trabalho completamente diferente.</p><p>PHP é também uma <strong><strong>linguagem de tipagem dinâmica</strong></strong>. Isso quer dizer que o tipo das variáveis ​​é verificado em tempo de execução, e não antes de o código ser executado, como acontece com as linguagens de tipagem estática (que também são compiladas – essas duas características geralmente andam de mãos dadas).</p><p>O PHP também é fracamente tipado. Comparado com linguagens fortemente tipadas como o Swift, o Go, o C ou o Java, você não precisa declarar os tipos de suas variáveis.</p><p>Ser interpretado e tipado de forma dinâmica torna os bugs mais difíceis de serem encontrados antes que aconteçam, em tempo de execução.</p><p>Em linguagens compiladas, você pode, em muitos casos, detectar os erros na hora que estiver compilando a aplicação, algo que não acontece em linguagens interpretadas.</p><p>Por outro lado, uma linguagem interpretada tem maior flexibilidade.</p><p>Um fato engraçado é que o PHP é escrito internamente em C, uma linguagem compilada e estaticamente tipada.</p><p>Em sua natureza, o PHP é similar ao JavaScript, outra linguagem de tipagem dinâmica, fracamente tipada e interpretada.</p><p>O PHP suporta programação estrutural, orientada a objetos e até funcional. Você pode usá-lo como quiser.</p><h2 id="como-configurar-o-php"><strong>Como configurar o PHP</strong></h2><p>Existem muitas formas de instalar o PHP em sua máquina local.</p><p>A maneira mais conveniente que encontrei para instalar o PHP localmente é usando o MAMP.</p><p>MAMP é uma ferramenta que está disponível gratuitamente para todos os sistemas operacionais – Mac, Windows e Linux. É um pacote que fornece todas as ferramentas de que você precisa para começar a trabalhar.</p><p>O PHP é executado por um servidor HTTP, responsável por responder às requisições HTTP, que são aquelas feitas pelo navegador. Então, você acessa um URL com seu navegador, Chrome, Firefox ou Safari, e o servidor HTTP responde com o conteúdo em HTML.</p><p>Os servidores mais utilizados são o Apache ou o NGINX.</p><p>Para fazermos qualquer coisa que não seja trivial, também precisaremos de um banco de dados, como o MySQL.</p><p>O MAMP é um pacote que fornece tudo isso e muito mais, além de oferecer uma interface fácil de iniciar/parar tudo de uma vez.</p><p>Claro, você pode configurar cada uma dessas partes por conta própria, se quiser, e muitos tutoriais explicam como fazer isso. Eu, no entanto, gosto de ferramentas simples e práticas, e o MAMP certamente é uma delas.</p><p>Saiba, contudo, que você é livre para seguir os passos desse manual com qualquer tipo de método de instalação do PHP, não apenas com o MAMP.</p><p>Dito isso, se você ainda não tem o PHP instalado e se quiser usar o MAMP, acesse o site <a href="https://www.mamp.info/">https://www.mamp.info</a> e instale-o.</p><p>O processo dependerá do seu sistema operacional. Porém, assim que a instalação terminar, você terá o aplicativo "MAMP" instalado.</p><p>Inicie-o e você verá uma janela semelhante a esta:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.14.05.jpg" class="kg-image" alt="Screen_Shot_2022-06-24_at_15.14.05" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-24_at_15.14.05.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-24_at_15.14.05.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.14.05.jpg 1072w" sizes="(min-width: 720px) 720px" width="1072" height="868" loading="lazy"></figure><p>Certifique-se de que a versão do PHP selecionada seja a mais recente disponível.</p><p>No momento em que escrevo, o MAMP permite que você escolha a versão 8.0.8.</p><p>Observação: percebi que o MAMP tem uma versão um pouco atrasada, mas não é a mais recente. Você pode instalar a versão mais recente do PHP ativando a demonstração do MAMP PRO e, logo depois, instalando a versão mais recente das configurações do MAMP PRO (no meu caso, foi a 8.1.0). Em seguida, feche-o e reabra o MAMP (versão não profissional). O MAMP PRO tem mais recursos e você pode querer usá-lo, mas ele não é necessário para seguir este manual.</p><p>Pressione o botão <em>Start</em> (Iniciar) no canto superior direito. Isso iniciará o servidor Apache HTTP, com o PHP e com o banco de dados MySQL habilitados.</p><p>Vá para o URL <a href="http://localhost:8888/">http://localhost:8888</a> e você verá uma página similar a esta:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.19.05.jpg" class="kg-image" alt="Screen_Shot_2022-06-24_at_15.19.05" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-24_at_15.19.05.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-24_at_15.19.05.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-24_at_15.19.05.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.19.05.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1224" loading="lazy"></figure><p>Agora estamos prontos para escrever um pouco de PHP!</p><p>Abra a pasta listada como "Document root". Você consegue abri-la diretamente ou configurar o caminho dela em <em>Preferences &gt; Server</em> (Preferências &gt; Servidor). Se estiver usando o MAMP em um Mac, por padrão, a pasta é <code>/Applications/MAMP/htdocs</code>.</p><p>No Windows, ela é <code>C:\MAMP\htdocs</code>.</p><p>No seu computador, ela pode ser diferente, dependendo da configuração. No MAMP, você pode encontrá-la na interface de usuário do aplicativo.</p><p>Lá, você encontrará um arquivo chamado <code>index.php</code>.</p><p>Ele é o responsável por mostrar a página mostrada acima.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.17.58.jpg" class="kg-image" alt="Screen_Shot_2022-06-24_at_15.17.58" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-24_at_15.17.58.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-24_at_15.17.58.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.17.58.jpg 1328w" sizes="(min-width: 720px) 720px" width="1328" height="886" loading="lazy"></figure><h2 id="como-escrever-seu-primeiro-programa-php"><strong>Como escrever seu primeiro programa PHP</strong></h2><p>Ao aprender uma nova linguagem de programação, temos a tradição de criar uma aplicação "Hello, World!", que é algo que simplesmente mostrará essa string.</p><p>Certifique-se de que o MAMP esteja em execução e abra a pasta <code>htdocs</code> como expliquei antes.</p><p>Abra o arquivo <code>index.php</code> em um editor de código.</p><p>Eu recomendo usar o <a href="https://code.visualstudio.com/">VS Code</a>, por ser um editor de código simples e poderoso. Você pode ver uma introdução a ele em <a href="https://flaviocopes.com/vscode/">https://flaviocopes.com/vscode/</a> (em inglês).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.37.36.jpg" class="kg-image" alt="Screen_Shot_2022-06-24_at_15.37.36" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-24_at_15.37.36.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-24_at_15.37.36.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-24_at_15.37.36.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.37.36.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1232" loading="lazy"></figure><p>Esse é o código que mostra a página de boas-vindas do MAMP, que você viu no navegador.</p><p>Apague tudo e substitua o conteúdo por:</p><pre><code class="language-php">&lt;?php
echo 'Hello World';
?&gt;
</code></pre><p>Salve, atualize a página em <a href="http://localhost:8888/">http://localhost:8888</a> e, agora, você deverá ver isto:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.39.00.jpg" class="kg-image" alt="Screen_Shot_2022-06-24_at_15.39.00" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-24_at_15.39.00.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-24_at_15.39.00.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-24_at_15.39.00.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-24_at_15.39.00.jpg 1716w" sizes="(min-width: 720px) 720px" width="1716" height="1064" loading="lazy"></figure><p>Excelente! Você criou seu primeiro programa em PHP.</p><p>Vamos explicar o que está acontecendo aqui.</p><p>Temos o servidor Apache HTTP escutando na porta <code>8888</code> do localhost, que é o seu computador.</p><p>Quando acessamos <a href="http://localhost:8888/">http://localhost:8888</a> com o navegador, estamos fazendo uma requisição de HTTP, solicitando o conteúdo do caminho <code>/</code>, o URL base.</p><p>O Apache, por padrão, está configurado para mostrar esse caminho com o arquivo <code>index.html</code> incluído na pasta <code>htdocs</code>. Esse arquivo não existe, mas, como configuramos o Apache para trabalhar com PHP, ele procurará um arquivo <code>index.php</code>.</p><p>Esse arquivo existe e o código em PHP é executado no servidor antes que o Apache envie a página de volta ao navegador.</p><p>No arquivo PHP, temos uma tag de abertura <code>&lt;?php</code>, que diz "aqui começa um código em PHP".</p><p>Temos, no final, a tag <code>?&gt;</code>, que encerra o trecho de código em PHP e, dentro do código, usamos a instrução <code>echo</code> para imprimir a string entre aspas no HTML.</p><p>Só lembrando, que o ponto e vírgula é necessário ao final de cada instrução.</p><p>Temos essa estrutura de abertura/fechamento porque podemos embutir PHP dentro do HTML. O PHP é uma linguagem de script. Seu objetivo é poder "decorar" uma página HTML com dados dinâmicos.</p><p>Observe que, com o PHP moderno, geralmente evitamos misturar PHP no HTML. Em vez disso, usamos PHP como um "framework para gerar o HTML" – por exemplo, usando ferramentas como o Laravel. No entanto, como vamos discutir o <em><em>PHP simples</em></em> nesse manual, faz sentido começarmos do básico.</p><p>Por exemplo, algo assim trará o mesmo resultado no navegador:</p><pre><code class="language-php">Hello
&lt;?php
echo 'World';
?&gt;
</code></pre><p>Para o usuário final, que só olha a tela do navegador e não tem ideia do código nos bastidores, não há diferença alguma.</p><p>A página é tecnicamente uma página com extensão HTML, embora não tenha tags HTML, apenas uma string <code>Hello World</code>. O navegador é quem faz o trabalho de descobrir como exibir isso na janela.</p><h2 id="fundamentos-da-linguagem-php"><strong>Fundamentos da linguagem PHP</strong></h2><p>Após o primeiro "Hello World", é hora de mergulhar nos recursos da linguagem em mais detalhes.</p><h3 id="como-as-vari-veis-funcionam-no-php"><strong>Como as variáveis ​​funcionam no PHP</strong></h3><p>Variáveis ​​em PHP sempre começam com o cifrão <code>$</code>, seguido por um identificador, que é um conjunto de caracteres alfanuméricos e o caractere de sublinhado <code>_</code>.</p><p>Você pode atribuir a uma variável qualquer tipo de valor, como uma string (definida usando aspas simples ou duplas):</p><pre><code class="language-php">$nome = 'Flavio';

$nome = "Flavio";
</code></pre><p>Ou números:</p><pre><code class="language-php">$idade = 20;
</code></pre><p>Ou qualquer outro tipo que o PHP permitir, como veremos mais para frente.</p><p>Uma vez que uma variável recebe um valor, por exemplo, uma string, podemos atribuir a ela um tipo diferente de valor, como um número:</p><pre><code class="language-php">$nome = 3;
</code></pre><p>O PHP não vai reclamar que agora o tipo é diferente (lembre-se que ele é uma linguagem fracamente tipada).</p><p>Os nomes de variáveis ​​diferenciam maiúsculas de minúsculas. Então, <code>$nome</code> é diferente de <code>$Nome</code>.</p><p>Não é uma regra fixa, mas geralmente os nomes das variáveis ​​são escritos no formato camelCase, assim: <code>$marcaDoCarro</code> ou <code>$idadeDoCachorro</code>. Mantemos a primeira letra minúscula e as letras que iniciam as palavras seguintes em maiúsculas.</p><h3 id="como-escrever-coment-rios-no-php"><strong>Como escrever comentários no PHP</strong></h3><p>Uma parte muito importante de qualquer linguagem de programação é como você escreve comentários no meio do código.</p><p>Comentários de linha única são escritos em PHP desta forma:</p><pre><code class="language-php">// Comentários de linha única
</code></pre><p>Já comentários de várias linhas são feitos desta forma:</p><pre><code class="language-php">/*

Isto é um comentário

*/

// Ou

/*
 *
 * Isto é um comentário
 *
 */

// Ou para comentar uma parte do código dentro de uma linha:

$nome = /* Isto é um comentário */ 'Flavio';
</code></pre><h3 id="o-que-s-o-tipos-em-php"><strong>O que são tipos em PHP?</strong></h3><p>Já mencionei as strings e os números.</p><p>O PHP possui os seguintes tipos:</p><ul><li><code>bool</code>: valores booleanos (verdadeiro/falso)</li><li><code>int</code>: números inteiros (sem decimais)</li><li><code>float</code>: números de ponto flutuante (decimais)</li><li><code>string</code>: sequência de caracteres</li><li><code>array</code>: matriz</li><li><code>object</code>: objeto</li><li><code>null</code>: um valor que significa "nenhum valor atribuído"</li></ul><p>e alguns outros mais avançados.</p><h3 id="como-imprimir-o-valor-de-uma-vari-vel-no-php"><strong>Como imprimir o valor de uma variável no PHP</strong></h3><p>Podemos usar a função interna <code>var_dump()</code> para obter o valor de uma variável:</p><pre><code class="language-php">$nome = 'Flavio';

var_dump($nome);
</code></pre><p>A instrução <code>var_dump($nome)</code> será impressa assim <code>string(6) "Flavio"</code> na página, o que nos diz que a variável é uma string de 6 caracteres.</p><p>Se usarmos este código:</p><pre><code class="language-php">$idade = 20;

var_dump($idade);
</code></pre><p>teríamos de volta <code>int(20)</code> dizendo que o valor é 20 e é um número inteiro.</p><p><code>var_dump()</code> é uma das ferramentas essenciais em seu conjunto de ferramentas para depurar o PHP.</p><h3 id="como-os-operadores-funcionam-no-php"><strong>Como os operadores funcionam no PHP</strong></h3><p>Depois de ter algumas variáveis, você vai querer fazer operações com elas:</p><pre><code class="language-php">$largura = 20;
$altura = 10;

$area = $largura * $altura;
</code></pre><p>O <code>*</code> que eu usei para multiplicar <code>$largura</code> por <code>$altura</code> é o operador de multiplicação.</p><p>Temos alguns operadores – então, vamos fazer um rápido resumo dos principais.</p><p>Para começar, aqui estão os operadores aritméticos: <code>+</code> (soma), <code>-</code> (subtração), <code>*</code> (multiplicação), <code>/</code> (divisão), <code>%</code> (resto) e <code>**</code> (exponencial).</p><p>Temos o operador de atribuição <code>=</code>, que já usamos para atribuir um valor a uma variável.</p><p>Em seguida, temos os operadores de comparação, como <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code> e <code>&gt;=</code>. Eles funcionam da mesma forma que na matemática.</p><pre><code class="language-php">2 &lt; 1; // false
1 &lt;= 1; // true
1 &lt;= 2; // true
</code></pre><p><code>==</code> retorna <code>true</code> se os dois operandos forem iguais.</p><p>Já o operador <code>===</code> retorna <code>true</code> se os dois operandos forem idênticos.</p><p>Qual é a diferença? Um compara somente o valor, o segundo compara o tipo também.</p><p>Com a experiência ficará bem claro isso, mas, por exemplo:</p><pre><code class="language-php">1 == '1'; // true
1 === '1'; // false
</code></pre><p>Também temos o operador <code>!=</code> que detecta se os operandos <em><em>não</em></em> são iguais:</p><pre><code class="language-php">1 != 1; // false
1 != '1'; // false
1 != 2; // true

// Dica: &lt;&gt; funciona da mesma forma que !=, 1 &lt;&gt; 1
</code></pre><p>E o <code>!==</code> para detectar se os operandos não são idênticos:</p><pre><code class="language-php">1 !== 1; // false
1 !== '1'; // true
</code></pre><p>Os operadores lógicos trabalham com valores booleanos:</p><pre><code class="language-php">// Lógica E com &amp;&amp; ou "and"

true &amp;&amp; true; // true
true &amp;&amp; false; // false
false &amp;&amp; true; // false
false &amp;&amp; false; // false

true and true; // true
true and false; // false
false and true; // false
false and false; // false

// Lógica OU com || ou "or"

true || true; // true
true || false // true
false || true // true
false || false // false

true or true; // true
true or false // true
false or true // true
false or false // false

// Lógica XOR (um dos dois é verdade, mas não ambos)

true xor true; // false
true xor false // true
false xor true // true
false xor false // false
</code></pre><p>Temos também o operador <em><em>not:</em></em></p><pre><code class="language-php">$teste = true

!$teste // false
</code></pre><p>Eu usei os valores booleanos <code>true</code> e <code>false</code> aqui, mas, na prática, você usará expressões que avaliam se é verdadeiro ou falso, como neste exemplo:</p><pre><code class="language-php">1 &gt; 2 || 2 &gt; 1; // true

1 !== 2 &amp;&amp; 2 &gt; 2; // false</code></pre><p>Todos os operadores listados acima são <em><em>binários</em></em>, o que significa que envolvem 2 operandos.</p><p>O PHP também possui 2 operadores unários, são eles: <code>++</code> e <code>--</code>.</p><pre><code class="language-php">$idade = 20;
$idade++;
// a idade agora é 21

$idade--;
// a idade agora é 20
</code></pre><h2 id="como-trabalhar-com-strings-no-php"><strong>Como trabalhar com strings no PHP</strong></h2><p>Eu introduzi o uso de strings anteriormente quando falamos sobre variáveis ​​e definimos uma string usando esse exemplo:</p><pre><code class="language-php">$nome = 'Flavio'; // string definida com aspas simples

$nome = "Flavio"; // string definida com aspas duplas
</code></pre><p>A grande diferença entre usar aspas simples e duplas é que com aspas duplas podemos expandir as variáveis ​​desta forma:</p><pre><code class="language-php">$teste = 'um exemplo';

$exemplo = "Este é $teste"; // Este é um exemplo
</code></pre><p>E com aspas duplas podemos usar <em><em>caracteres de escape</em></em> - como novas linhas <code>\n</code> ou tabulações <code>\t</code>:</p><pre><code class="language-php">$exemplo = "Esta é uma linha\nEsta é uma linha";

/*
a saída será:

Esta é uma linha
Esta é uma linha
*/
</code></pre><p>O PHP oferece uma lista de funções bem abrangentes em sua biblioteca padrão (a biblioteca de funcionalidades que a linguagem oferece por padrão).</p><p>Primeiro, podemos concatenar duas strings usando o operador <code>.</code>:</p><pre><code class="language-php">$primeiroNome = 'Flavio';
$sobrenome = 'Copes';

$nomeCompleto = $primeiroNome . ' ' . $sobrenome;
</code></pre><p>Podemos verificar o comprimento de uma string usando a função <code>strlen()</code>:</p><pre><code class="language-php">$nome = 'Flavio';
strlen($nome); // 6
</code></pre><p>Essa é a primeira vez que usamos uma função.</p><p>Uma função é composta por um identificador (nesse caso é o <code>strlen</code>) seguido de parênteses. Dentro desses parênteses, passamos um ou mais argumentos para a função. Nesse exemplo, temos um argumento.</p><p>Uma função é responsável por fazer <em><em>algo</em></em> e, quando terminar, pode ou não retornar um valor. Nesse caso, ela retorna o número <code>6</code>. Se não há retorno de nenhum valor, a função retorna <code>null</code>.</p><p>Veremos mais para frente como escrever nossas próprias funções.</p><p>Podemos obter uma parte de uma string usando a função <code>substr()</code>:</p><pre><code class="language-php">$nome = 'Flavio';
substr($nome, 3); // "vio" - comece na posição 3 e pegue todo o resto
substr($nome, 2, 2); // "av" - comece na posição 2 e pegue 2 caracteres
</code></pre><p>Podemos substituir uma parte de uma string usando <code>str_replace()</code>:</p><pre><code class="language-php">$nome = 'Flavio';
str_replace('avio', 'or', $nome); // "Flor"
</code></pre><p>Claro que podemos também atribuir o resultado a uma nova variável:</p><pre><code class="language-php">$nome = 'Flavio';
$itemObservado = str_replace('avio', 'or', $nome); // "Flor"
</code></pre><p>Isso é só o começo. Há muito mais funções internas que você pode usar para trabalhar com strings.</p><p>Esta é uma &nbsp;pequena lista (não abrangente) para mostrar algumas possibilidades:</p><ul><li><a href="https://www.php.net/manual/en/function.trim.php"><code>trim()</code></a>: remove o espaço em branco no início e no final de uma string</li><li><a href="https://www.php.net/manual/en/function.strtoupper.php"><code>strtoupper()</code></a>: transforma uma string em maiúscula</li><li><a href="https://www.php.net/manual/en/function.strtolower.php"><code>strtolower()</code></a>: transforma uma string em minúscula</li><li><a href="https://www.php.net/manual/en/function.ucfirst.php"><code>ucfirst()</code></a>: transforma o primeiro caractere maiúsculo</li><li><a href="https://www.php.net/manual/en/function.strpos.php"><code>strpos()</code></a>: encontra a primeira ocorrência de uma substring na string</li><li><a href="https://www.php.net/manual/en/function.explode.php"><code>explode()</code></a>: divide uma string em um array</li><li><a href="https://www.php.net/manual/en/function.implode.php"><code>implode()</code></a>: junta os elementos de um array em uma string</li></ul><p>Você pode encontrar a lista completa <a href="https://www.php.net/manual/pt_BR/book.strings.php">aqui</a>.</p><h2 id="como-usar-fun-es-internas-para-n-meros-no-php"><strong>Como usar funções internas para números no PHP</strong></h2><p>Eu listei algumas funções que normalmente usamos para strings.</p><p>Agora vamos fazer uma lista de funções que usamos com números:</p><ul><li><a href="https://www.php.net/manual/en/function.round.php"><code>round()</code></a>: arredonda um número decimal, para cima/para baixo, dependendo de o valor ser maior ou menor que 0,5</li><li><a href="https://www.php.net/manual/en/function.ceil.php"><code>ceil()</code></a>: arredonda um número decimal para cima</li><li><a href="https://www.php.net/manual/en/function.floor.php"><code>floor()</code></a>: arredonda um número decimal para baixo</li><li><a href="https://www.php.net/manual/en/function.rand.php"><code>rand()</code></a>: gera um número inteiro aleatório</li><li><a href="https://www.php.net/manual/en/function.min.php"><code>min()</code></a>: encontra o número mais baixo nos números passados ​​como argumentos</li><li><a href="https://www.php.net/manual/en/function.max.php"><code>max()</code></a>: encontra o número mais alto nos números passados ​​como argumentos</li><li><a href="https://www.php.net/manual/en/function.is-nan.php"><code>is_nan()</code></a>: retorna true se o número não for um número</li></ul><p>Há inúmeras funções diferentes para todos os tipos de operações matemáticas, como seno, cosseno, tangentes, logaritmos e assim por diante. Você pode encontrar a lista completa <a href="https://www.php.net/manual/pt_BR/book.math.php">aqui</a>.</p><h2 id="como-os-arrays-funcionam-no-php"><strong>Como os arrays funcionam no PHP</strong></h2><p>O array é uma lista de valores agrupados sob um nome comum.</p><p>Você pode definir um array vazio de duas maneiras diferentes:</p><pre><code class="language-php">$lista = [];

$lista = array();
</code></pre><p>Um array pode ser inicializado com valores também:</p><pre><code class="language-php">$lista = [1, 2];

$lista = array(1, 2);
</code></pre><p>Arrays podem conter valores de qualquer tipo:</p><pre><code class="language-php">$lista = [1, 'test'];
</code></pre><p>E também outros arrays:</p><pre><code class="language-php">$lista = [1, [2, 'test']];
</code></pre><p>Você pode acessar os elementos de um array desta forma:</p><pre><code class="language-php">$lista = ['a', 'b'];
$lista[0]; // 'a' - o índice começa em 0
$lista[1]; // 'b'
</code></pre><p>Depois que um array é criado, você pode anexar valores a ele, assim:</p><pre><code class="language-php">$lista = ['a', 'b'];
$lista[] = 'c';

/*
$lista == [
  "a",
  "b",
  "c",
]
*/
</code></pre><p>Ou, se quiser usar a função <code>array_unshift()</code> para adicionar o item no início do array:</p><pre><code class="language-php">$lista = ['b', 'c'];
array_unshift($lista, 'a');

/*
$lista == [
  "a",
  "b",
  "c",
]
*/
</code></pre><p>Para contar quantos itens um array tem, você pode usar a função interna <code>count()</code>:</p><pre><code class="language-php">$lista = ['a', 'b'];

count($lista); // 2
</code></pre><p>Ou verificar se um array contém um valor específico, usando a função <code>in_array()</code>:</p><pre><code class="language-php">$lista = ['a', 'b'];

in_array('b', $lista); // true
</code></pre><p>Se, além de confirmar a existência, você precisar saber o índice, use <code>array_search()</code>:</p><pre><code class="language-php">$lista = ['a', 'b'];

array_search('b', $lista) // 1
</code></pre><h3 id="fun-es-teis-para-arrays-no-php"><strong>Funções úteis para arrays no PHP</strong></h3><p>Assim como com strings e números, o PHP fornece muitas funções muito úteis para arrays. Já vimos <code>count()</code>, <code>in_array()</code>, <code>array_search()</code>. Vejamos mais funções abaixo:</p><ul><li><code>is_array()</code>: verifica se uma variável é um array</li><li><code>array_unique()</code>: remove valores duplicados de um array</li><li><code>array_search()</code>: pesquisa um valor no array e retornar a chave</li><li><code>array_reverse()</code>: inverte um array</li><li><code>array_reduce()</code>: reduz um array à um único valor usando uma função callback</li><li><code>array_map()</code>: aplica uma função de callback a cada item no array. Normalmente usado para criar um novo array modificando os valores de um array existente, sem alterá-lo.</li><li><code>array_filter()</code>: para filtrar um array para um único valor usando uma função callback</li><li><code>max()</code>: obtém o valor máximo contido no array</li><li><code>min()</code>: obtém o valor mínimo contido no array</li><li><code>array_rand()</code>: obtém um item aleatório do array</li><li><code>array_count_values()</code>: conta todos os valores no array</li><li><code>implode()</code>: transforma um array em uma string</li><li><code>array_pop()</code>: remove o último item do array e retornar seu valor</li><li><code>array_shift()</code>: o mesmo que <code>array_pop()</code>, mas remove o primeiro item em vez do último</li><li><code>sort()</code>: ordena um array</li><li><code>rsort()</code>: classifica um array na ordem inversa</li><li><code>array_walk()</code>: da mesma forma que <code>array_map()</code>, faz algo para cada item no array, mas, além disso, pode alterar valores no array existente</li></ul><h3 id="como-usar-arrays-associativos-no-php"><strong>Como usar arrays associativos no PHP</strong></h3><p>Até agora só usamos arrays com índice numérico incremental: 0, 1, 2…</p><p>Você também pode, no entanto, usar arrays com índices nomeados (chaves), aos quais chamamos de arrays associativos:</p><pre><code class="language-php">$lista = ['primeiro' =&gt; 'a', 'segundo' =&gt; 'b'];

$lista['primeiro'] // 'a'
$lista['segundo'] // 'b'
</code></pre><p>Temos algumas funções que são muito úteis para arrays associativos:</p><ul><li><code>array_key_exists()</code>: verifica se existe uma chave no array</li><li><code>array_keys()</code>: obtém todas as chaves do array</li><li><code>array_values()</code>: obtém todos os valores do array</li><li><code>asort()</code>: classifica um array associativo por valor</li><li><code>arsort()</code>: classifica um array associativo em ordem decrescente por valor</li><li><code>ksort()</code>: classifica um array associativo por chave</li><li><code>krsort()</code>: classifica um array associativo em ordem decrescente por chave</li></ul><p>Você pode ver todas as funções relacionadas a arrays <a href="https://www.php.net/manual/pt_BR/ref.array.php">aqui</a>.</p><h2 id="como-funcionam-as-condicionais-no-php"><strong>Como funcionam as condicionais no PHP</strong></h2><p>Anteriormente, mostrei os operadores de comparação: <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code>, <code>&gt;=</code>, <code>==</code>, <code>===</code>, <code>!=</code>, <code>!==</code>...</p><p>Esses operadores serão superúteis para uma coisa: <strong><strong>condicionais</strong></strong>.</p><p>Condicional é a primeira estrutura de controle que se vê.</p><p>Com ela podemos decidir fazer uma coisa ou fazer outra, com base em uma comparação.</p><p>Por exemplo:</p><pre><code class="language-php">$idade = 17;

if ($idade &gt; 18) {
  echo 'Você pode entrar no pub';
}
</code></pre><p>O código dentro dos colchetes só será executado se a condição for avaliada como <code>true</code>.</p><p>Use <code>else</code> para fazer <em><em>outra coisa</em></em> caso a condição seja <code>false</code>:</p><pre><code class="language-php">$idade = 17;

if ($idade &gt; 18) {
  echo 'You can enter the pub'; // Você pode entrar no pub
} else {
  echo 'You cannot enter the pub'; // Você não pode entrar no pub
}
</code></pre><p>Observação: eu usei <code>cannot</code> em vez de <code>can't</code> porque a aspa simples terminaria minha string antes do final da frase. Nesse caso, você pode "escapar" o <code>'</code> desta forma: <code>echo 'You can\'t enter the pub';</code></p><p>Você pode ter o encadeamento de várias instruções <code>if</code> usando <code>elseif</code>:</p><pre><code class="language-php">$idade = 17;

if ($idade &gt; 20) {
  echo 'Você tem 20+';
} elseif ($idade &gt; 18) {
  echo 'Você tem 18+';
} else {
  echo 'Você tem &lt;18';
}
</code></pre><p>Além do <code>if</code>, também temos a declaração <code>switch</code>.</p><p>Nós a usamos quando temos uma variável que pode ter alguns valores diferentes e não precisamos ter um bloco <em>if/elseif</em> longo:</p><pre><code class="language-php">$idade = 17

switch($idade) {
  case 15:
	echo 'Você tem 15';
    break;
  case 16:
	echo 'Você tem 16';
    break;
  case 17:
	echo 'Você tem 17';
    break;
  case 18:
	echo 'Você tem 18';
    break;
  default:
    echo "Você tem $idade";
}
</code></pre><p>Eu sei que o exemplo não tem lógica, mas acho que ele pode ajudá-lo a entender como funciona o <code>switch</code>.</p><p>A declaração <code>break;</code> após cada caso é essencial. Se você não adicionar isso e se a idade for 17, você verá isto:</p><pre><code class="language-php">Você tem 17
Você tem 18
Você tem 17
</code></pre><p>Ao invés de apenas isto:</p><pre><code class="language-php">Você tem 17
</code></pre><p>Que é o que você esperaria.</p><h2 id="como-os-la-os-funcionam-no-php"><strong>Como os laços funcionam no PHP</strong></h2><p>Os laços, ou <em>loops </em>(como são mais conhecidos), são outra estrutura de controle superútil.</p><p>Temos alguns tipos diferentes de laços no PHP: <code>while</code>, <code>do while</code>, <code>for</code> e <code>foreach</code>.</p><p>Vamos ver todos eles!</p><h3 id="como-usar-um-la-o-while-no-php"><strong>Como usar um laço <code>while</code> no PHP</strong></h3><p>Um laço <code>while</code> é o mais simples. Ele continua iterando enquanto a condição for avaliada como <code>true</code>:</p><pre><code class="language-php">while (true) {
  echo 'repetindo';
}
</code></pre><p>O exemplo acima geraria um laço infinito, e é por isso que usamos variáveis ​​e comparações:</p><pre><code class="language-php">$contador = 0;

while ($contador &lt; 10) {
  echo $contador;
  $contador++;
}
</code></pre><h3 id="como-usar-um-la-o-do-while-no-php"><strong>Como usar um laço <code>do while</code> no PHP</strong></h3><p><code>do while</code> é similar, mas difere um pouco em como a primeira iteração é executada:</p><pre><code class="language-php">$contador = 0;

do {
  echo $contador;
  $contador++;
} while ($contador &lt; 10);
</code></pre><p>No <code>do while</code>, <em><em>primeiro </em></em>fazemos a primeira iteração, <em><em>depois</em></em> verificamos a condição.</p><p>No <code>while</code>, <em><em>primeiro </em></em>verificamos a condição, <em><em>depois </em></em>fazemos a iteração.</p><p>Faça um teste simples definindo <code>$counter</code> como 15 nos exemplos acima e veja o que acontece.</p><p>Você escolherá um tipo de laço ou outro, dependendo de seu caso de uso.</p><h3 id="como-usar-um-la-o-foreach-no-php"><strong>Como usar um laço <code>foreach</code> no PHP</strong></h3><p>Você pode usar o <code>foreach</code> para iterar facilmente em um array:</p><pre><code class="language-php">$lista = ['a', 'b', 'c'];

foreach ($lista as $valor) {
  echo $valor;
}
</code></pre><p>Também é possível obter o valor do índice (ou chave, em um array associativo), desta forma:</p><pre><code class="language-php">$lista = ['a', 'b', 'c'];

foreach ($lista as $chave =&gt; $valor) {
  echo $chave;
}
</code></pre><h3 id="como-usar-um-la-o-for-no-php"><strong>Como usar um laço <code>for</code> no PHP</strong></h3><p>O laço <code>for</code> é semelhante ao while, mas, ao invés de definir a variável usada na condicional antes da repetição e de incrementar a variável do índice manualmente, tudo é feito na primeira linha:</p><pre><code class="language-php">for ($i = 0; $i &lt; 10; $i++) {
  echo $i;
}

// result: 0123456789
</code></pre><p>Você pode usar o laço <em>for </em>para iterar sobre um <em>array </em>desta forma:</p><pre><code class="language-php">$lista = ['a', 'b', 'c'];

for ($i = 0; $i &lt; count($lista); $i++) {
  echo $lista[$i];
}

// resultado : abc
</code></pre><h3 id="como-usar-as-instru-es-break-e-continue-no-php"><strong>Como usar as instruções <code>break</code> e <code>continue</code> no PHP</strong></h3><p>Em muitos casos, você vai querer ser capaz de interromper um laço sob demanda.</p><p>Por exemplo, se desejar interromper um laço <code>for</code> quando o valor da variável no array for <code>'b'</code>:</p><pre><code class="language-php">$lista = ['a', 'b', 'c'];

for ($i = 0; $i &lt; count($lista); $i++) {
	if ($lista[$i] == 'b') {
    break;
  }
  echo $lista[$i];
}

// resultado: a
</code></pre><p>Isso faz com que o laço pare completamente nesse ponto e a execução do programa continue na próxima instrução após o laço.</p><p>Já se quiser apenas pular a iteração do laço atual e continuar procurando, use o <code>continue</code>:</p><pre><code class="language-php">$lista = ['a', 'b', 'c'];

for ($i = 0; $i &lt; count($lista); $i++) {
	if ($lista[$i] == 'b') {
    continue;
  }
  echo $lista[$i];
}

// resultado: ac
</code></pre><h2 id="como-agem-as-fun-es-no-php"><strong>Como agem as funções no PHP</strong></h2><p>As funções são um dos conceitos mais importantes na programação.</p><p>Podemos usar funções para agrupar várias instruções ou várias linhas de código e dar a elas um nome.</p><p>Por exemplo, se fizermos uma função que envia um e-mail. N[os a chamaremos de <code>enviarEmail</code> e vamos defini-la assim:</p><pre><code class="language-php">function enviarEmail() {
  // código para enviar o e-mail
}
</code></pre><p>Agora podemos <em><em>chamá-la</em></em> em qualquer outro lugar usando esta sintaxe:</p><pre><code class="language-php">enviarEmail();
</code></pre><p>Também podemos passar argumentos para uma função. Por exemplo, quando enviarmos um e-mail e desejarmos enviá-lo para alguém específico. Adicionamos o e-mail individual como o primeiro argumento:</p><pre><code class="language-php">enviarEmail('test@test.com');
</code></pre><p>Dentro da definição da função, obtemos este parâmetro (nós os chamamos de <em><em>parâmetros</em></em> dentro da definição da função e <em><em>argumentos</em></em> quando chamamos a função) assim:</p><pre><code class="language-php">function enviarEmail($to) {
  echo "enviar e-mail para $to";
}
</code></pre><p>É possível enviar vários argumentos separando-os com vírgulas:</p><pre><code class="language-php">enviarEmail('test@test.com', 'subject', 'body of the email');
</code></pre><p>E podemos obter esses parâmetros na ordem em que foram definidos:</p><pre><code class="language-php">function enviarEmail($to, $subject, $body) {
  //...
}
</code></pre><p>Podemos, <strong>o<strong>pcionalmente</strong></strong>, definir o tipo dos parâmetros, assim:</p><pre><code class="language-php">function enviarEmail(string $to, string $subject, string $body) {
  //...
}
</code></pre><p>Além de os parâmetros poderem ter um valor padrão. Nesse caso, mesmo se forem omitidos quando chamados, eles ainda terão um valor:</p><pre><code class="language-php">function enviarEmail($to, $subject = 'test', $body = 'test') {
  //...
}

enviarEmail('test@test.com')
</code></pre><p>Uma função pode retornar um valor. Apenas um valor pode ser retornado a partir de uma função, não mais de um. Você faz isso usando a palavra-chave <code>return</code>. Se ela for omitida, a função retorna <code>null</code>.</p><p>O valor retornado é superútil, pois informa o resultado do trabalho realizado na função e permite que você use seu resultado após chamá-la:</p><pre><code class="language-php">function enviarEmail($to) {
	return true;
}

$successo = enviarEmail('test@test.com');

if ($successo) {
  echo 'e-mail enviado com sucesso';
} else {
  echo 'erro ao enviar e-mail';
}
</code></pre><p><strong><strong>Opcionalmente</strong></strong>, podemos definir o tipo de retorno de uma função usando esta sintaxe:</p><pre><code class="language-php">function enviarEmail($to): bool {
	return true;
}
</code></pre><p>Quando se define uma variável dentro de uma função, essa variável é <strong><strong>local</strong></strong> para a função, o que significa que não será visível fora dela. Quando a função termina, ela simplesmente deixa de existir:</p><pre><code class="language-php">function enviarEmail($to) {
	$teste = 'a';
}

var_dump($teste); // Erro no PHP: variável indefinida $test
</code></pre><p>E variáveis ​​definidas fora da função <strong><strong>não</strong></strong> são acessíveis dentro da função.</p><p>Isso impõe uma boa prática de programação, pois podemos ter certeza de que a função não modifica variáveis ​​externas e não acaba causando "efeitos colaterais".</p><p>Em vez disso, você retorna um valor da função e o código externo que chama a função assumirá a responsabilidade de atualizar a variável externa, assim:</p><pre><code class="language-php">$caractere = 'a';

function teste() {
  return 'b';
}

$caractere = teste();
</code></pre><p>Você pode passar o valor de uma variável como argumento para a função:</p><pre><code class="language-php">$caractere = 'a';

function teste($c) {
  echo $c;
}

teste($caractere);
</code></pre><p>Porém, você não poderá modificar esse valor de dentro da função.</p><p>Ele é apenas <strong><strong>passado por val</strong>or</strong>, o que significa que a função recebe uma cópia dele, não a referência à variável original.</p><p>Isso é possível, no entanto usando a sintaxe a seguir (observe que usei <code>&amp;</code> na definição do parâmetro):</p><pre><code class="language-php">$caractere = 'a';

function teste(&amp;$c) {
  $c = 'b';
}

teste($caractere);

echo $caractere; // 'b'
</code></pre><p>As funções que definimos até agora são <strong><strong>funções nomeadas</strong></strong>.</p><p>Elas têm um nome.</p><p>No entanto, também temos as <strong><strong>funções anônimas</strong></strong>, que são úteis em muitos casos.</p><p>Elas não têm um nome por si mesmas, mas são atribuídas a uma variável. Para chamá-las, você invoca a variável com parênteses no final:</p><pre><code class="language-php">$minhafuncao = function() {
  // faz alguma coisa aqui
};

$minhafuncao()
</code></pre><p>Observe que você precisa pôr um ponto e vírgula após a definição da função, e elas funcionam como funções nomeadas na questão de valores de retorno e parâmetros.</p><p>Curiosamente, elas oferecem uma maneira de acessar uma variável definida fora da função por meio do <code>use()</code>:</p><pre><code class="language-php">$teste = 'teste';

$minhafuncao = function() use ($teste) {
  echo $teste;
  return 'ok';
};

$minhafuncao()
</code></pre><p>Outro tipo de função bem conhecida é a <strong>arrow function</strong> (ou função de seta, em português).</p><p>Uma arrow function é uma função anônima que é apenas uma expressão (uma linha) e retorna implicitamente o valor dessa expressão.</p><p>Você a define assim:</p><pre><code class="language-php">fn (argumentos) =&gt; expressão;
</code></pre><p>Este é um exemplo:</p><pre><code class="language-php">$imprimirTeste = fn() =&gt; 'teste';

$imprimirTeste(); // 'teste'
</code></pre><p>Você pode passar parâmetros para ela normalmente:</p><pre><code class="language-php">$multiplicar = fn($a, $b) =&gt; $a * $b;

$multiplicar(2, 4) // 8
</code></pre><p>Observe que, como mostrará o próximo exemplo, as arrow functions têm acesso automático às variáveis ​​do escopo delimitador externo, sem a necessidade de <code>use()</code>.</p><pre><code class="language-php">$a = 2;
$b = 4;

$multiplicar = fn() =&gt; $a * $b;

$multiplicar()
</code></pre><p>As arrow functions são superúteis quando você precisa passar uma função de callback. Veremos como usá-las para realizar algumas operações de array mais tarde.</p><p>Portanto, temos ao todo 3 tipos de funções: funções <strong><strong>nomeadas</strong></strong>, funções <strong><strong>anônimas</strong></strong> e <strong><strong>arrow function</strong>s</strong>.</p><p>Cada uma deles tem sua utilidade. Você aprenderá a usá-las corretamente ao longo do tempo e com a prática.</p><h2 id="como-fazer-um-la-o-atrav-s-de-arrays-com-map-filter-e-reduce-no-php"><strong>Como fazer um laço através de arrays com <code>map()</code>, <code>filter()</code> e <code>reduce()</code> no PHP</strong></h2><p>Outro conjunto importante de estruturas de repetição, frequentemente usado na programação funcional, é o conjunto de <code>array_map()</code>/<code>array_filter()</code>/ <code>array_reduce()</code>.</p><p>Essas 3 funções incorporadas ao PHP pegam um array e uma função de callback que, em cada iteração, pegam um item do array por vez.</p><p><code>array_map()</code> retorna um novo array que contém o resultado da execução da função de callback em cada item do array:</p><pre><code class="language-php">$numeros = [1, 2, 3, 4];
$duplos = array_map(fn($valor) =&gt; $valor * 2, $numeros);

// $duplos agora é [2, 4, 6, 8]
</code></pre><p><code>array_filter()</code> gera um novo array obtendo apenas os itens cuja função de callback retorna <code>true</code>:</p><pre><code class="language-php">$numeros = [1, 2, 3, 4];
$mesmo = array_filter($numeros, fn($valor) =&gt; $valor % 2 === 0)

// $mesmo é agora [2, 4]
</code></pre><p><code>array_reduce()</code> é usado para <em><em>reduzir</em></em> um array a um único valor.</p><p>Por exemplo, podemos usá-la para multiplicar todos os itens em um array:</p><pre><code class="language-php">$numeros = [1, 2, 3, 4];

$resultado = array_reduce($numeros, fn($somatorio, $valor) =&gt; $somatorio * $valor, 1)
</code></pre><p>Observe o último parâmetro – ele é o valor inicial. Se você omiti-lo, o valor padrão será <code>0</code>, mas isso não funcionaria para o nosso exemplo de multiplicação (pois qualquer número multiplicado por zero é zero).</p><p>Perceba que a ordem dos argumentos na função <code>array_map()</code> é invertida. Primeiro, você tem a função de callback e depois o array. Isso ocorre porque podemos passar vários arrays usando vírgulas (<code>array_map(fn($valor) =&gt; $valor * 2, $numeros, $outrosNumeros, $outroArray);</code>). O ideal seria ter mais consistência, mas é isso que temos.</p><h2 id="programa-o-orientada-a-objetos-no-php"><strong>Programação Orientada a Objetos no PHP</strong></h2><p>Vamos agora pular de cabeça em um tópico gigante: programação orientada a objetos com PHP.</p><p>A programação orientada a objetos permite criar abstrações úteis e tornar seu código mais simples de entender e gerenciar.</p><h3 id="como-usar-classes-e-objetos-no-php"><strong>Como usar classes e objetos no PHP</strong></h3><p>Para começar, você tem classes e objetos.</p><p>Uma classe é um blueprint (modelo), ou tipo, de objeto.</p><p>Por exemplo, temos a classe <code>Cachorro</code>, definida desta forma:</p><pre><code class="language-php">class Cachorro {

}
</code></pre><p>Lembre-se de que as classes devem sempre começar com letra maiúscula.</p><p>Agora, você pode criar objetos desta classe – cães individuais e específicos.</p><p>Um objeto é atribuído a uma variável e é instanciado usando a sintaxe <code>new Nomedaclasse()</code>:</p><pre><code class="language-php">$roger = new Cachorro();
</code></pre><p>Você pode criar vários objetos da mesma classe, atribuindo cada objeto a uma variável diferente:</p><pre><code class="language-php">$roger = new Cachorro();
$syd = new Cachorro();
</code></pre><h3 id="como-usar-propriedades-no-php"><strong>Como usar propriedades no PHP</strong></h3><p>Esses objetos, os cães do exemplo acima, compartilharão as mesmas características definidas pela classe. Uma vez instanciados, contudo, eles terão vida própria.</p><p>Por exemplo, um cão tem um nome, uma idade e uma cor de pele.</p><p>Assim, podemos definir essas características como propriedades dentro da classe:</p><pre><code class="language-php">class Cachorro {
  public $nome;
  public $idade;
  public $cor;
}
</code></pre><p>Elas funcionam como variáveis, mas são anexadas ao objeto, uma vez que é instanciado a partir da classe. A palavra-chave <code>public</code> é o <em><em>modificador de acesso</em></em> que define a propriedade como sendo acessível publicamente.</p><p>Você pode atribuir valores a essas propriedades assim:</p><pre><code class="language-php">class Cachorro {
  public $nome;
  public $idade;
  public $cor;
}

$roger = new Cachorro();

$roger-&gt;nome = 'Roger';
$roger-&gt;idade = 10;
$roger-&gt;cor = 'cinza';

var_dump($roger);

/*
object(Cachorro)#1 (3) {
  ["nome"]=&gt; string(5) "Roger"
	["idade"]=&gt; int(10)
	["cor"]=&gt; string(4) "cinza"
}
*/
</code></pre><p>Observe que a propriedade foi definida como <code>public</code>.</p><p>Isso é chamado de modificador de acesso. Você pode usar outros dois tipos de modificadores de acesso: <code>private</code> e <code>protected</code>. <em><em>Private </em></em>torna a propriedade inacessível fora do objeto. Apenas métodos definidos dentro do objeto podem acessá-los.</p><p>Veremos mais sobre <em><em>protect </em></em>quando falarmos sobre herança.</p><h3 id="como-usar-m-todos-no-php"><strong>Como usar métodos no PHP</strong></h3><p>Eu disse método? Mas o que é um método?</p><p>Um método é uma função definida dentro da própria classe e é definida desta forma:</p><pre><code class="language-php">class Cachorro {
  public function latir() {
    echo 'au au!';
  }
}
</code></pre><p>Os métodos são muito úteis para anexar um comportamento a um objeto. Neste exemplo, podemos fazer um cachorro latir.</p><p>Observe que também usei a palavra-chave <code>public</code>. Isso quer dizer que será possível invocar esse método de fora da classe. E assim como para propriedades, você pode marcar métodos como <code>private</code>, ou <code>protected</code>, para restringir o acesso à eles.</p><p>Você chama um método na instância do objeto assim:</p><pre><code class="language-php">class Cachorro {
  public function latir() {
    echo 'au au!';
  }
}

$roger = new Cachorro();

$roger-&gt;latir();
</code></pre><p>Um método, assim como uma função, também pode definir parâmetros e um valor de retorno.</p><p>Dentro de um método, podemos acessar as propriedades do objeto usando a variável interna especial <code>$this</code>, que, quando referenciada dentro de um método, aponta para a instância atual do objeto:</p><pre><code class="language-php">class Cachorro {
  public $nome;

  public function latir() {
    echo $this-&gt;nome . ' latiu!';
  }
}

$roger = new Cachorro();
$roger-&gt;nome = 'Roger';
$roger-&gt;latir();
</code></pre><p>Observe que eu usei <code>$this-&gt;nome</code> para definir e acessar a propriedade <code>$nome</code>, e não <code>$this-&gt;$nome</code>(a diferença está no $).</p><h3 id="como-usar-o-m-todo-construtor-no-php"><strong>Como usar o método construtor no PHP</strong></h3><p>Existe um tipo especial de método, que é o <code>__construct()</code>. Ele é chamado de <strong><strong>construtor</strong></strong>. Você o declara assim:</p><pre><code class="language-php">class Cachorro {
	public function __construct() {

  }
}
</code></pre><p>Esse método serve para inicializar as propriedades de um objeto ao criá-lo, pois ele é chamado automaticamente quando chamamos <code>new Nomedaclasse()</code>.</p><pre><code class="language-php">class Cachorro {
  public $nome;

	public function __construct($nome) {
		$this-&gt;nome = $nome;
  }

  public function latir() {
    echo $this-&gt;nome . ' latiu!';
  }
}

$roger = new Cachorro('Roger');
$roger-&gt;latir();
</code></pre><p>Isso é algo tão comum que o PHP (a partir do PHP 8) inclui algo chamado de <strong><strong>promoção de construtor,</strong></strong> onde automaticamente faz isso:</p><pre><code class="language-php">class Cachorro {
  public $nome;

	public function __construct($nome) {
		$this-&gt;nome = $nome;
  }

  //...
</code></pre><p>Ao usar o modificador de acesso, a atribuição do parâmetro do construtor para a variável local acontece automaticamente:</p><pre><code class="language-php">class Cachorro {
	public function __construct(public $nome) {
  }

  public function latir() {
    echo $this-&gt;nome . ' latiu!';
  }
}

$roger = new Cachorro('Roger');
$roger-&gt;nome; // 'Roger'
$roger-&gt;latir(); // 'Roger latiu!'
</code></pre><p>Se preferir, as propriedades podem ser <strong><strong>tipadas</strong></strong>.</p><p>Você pode exigir, por exemplo, que a propriedade <em><em>n</em>o<em>me</em></em> seja uma string usando <code>public string $nome</code>:</p><pre><code class="language-php">class Cachorro {
  public string $nome;

	public function __construct($nome) {
		$this-&gt;nome = $nome;
  }

  public function latir() {
    echo $this-&gt;nome . ' latiu!';
  }
}

$roger = new Cachorro('Roger');
$roger-&gt;nome; // 'Roger'
$roger-&gt;latir(); // 'Roger latiu!'
</code></pre><p>Nesse exemplo acima, tudo funciona corretamente, mas tente alterar o tipo da propriedade para <code>public int $nome</code> para exigir que seja um número inteiro.</p><p>O PHP vai gerar um erro se você inicializar <code>$nome</code> com uma string:</p><pre><code>TypeError: Cachorro::__construct():
Argument #1 ($nome) must be of type int,
string given on line 14
</code></pre><p>Interessante, certo?</p><p>Podemos impor às propriedades que tenham um tipo específico entre <code>int</code>, <code>float</code>, <code>string</code>, <code>object</code>, <code>array</code>, <code>bool</code> e <a href="https://www.php.net/manual/pt_BR/language.types.declarations.php">outros</a> (página ainda não traduzida na documentação).</p><h3 id="o-que-heran-a-no-php"><strong>O que é herança no PHP?</strong></h3><p>A diversão na programação orientada a objetos começa quando permitimos que classes herdem propriedades e métodos de outras classes.</p><p>Suponhamos que você tenha uma classe <code>Animal</code>:</p><pre><code class="language-php">class Animal {

}
</code></pre><p>Todo animal tem uma idade e todo animal pode comer. Então, adicionamos uma propriedade <code>idade</code> e um método <code>comer()</code>:</p><pre><code class="language-php">class Animal {
  public $idade;

  public function comer() {
    echo 'o animal está comendo';
  }
}
</code></pre><p>Um cachorro é um animal, tem uma idade e pode comer também, então a classe <code>Cachorro</code> – ao invés de reimplementar as mesmas coisas que temos na classe <code>Animal</code>– pode estender a outra classe:</p><pre><code class="language-php">class Cachorro extends Animal {

}
</code></pre><p>Agora, podemos instanciar um novo objeto da classe <code>Cachorro</code> e temos acesso às propriedades e métodos definidos em <code>Animal</code>:</p><pre><code class="language-php">$roger = new Cachorro();
$roger-&gt;comer();
</code></pre><p>Neste caso, chamamos Cachorro de <strong><strong>classe filha</strong></strong> e Animal de <strong><strong>classe pai</strong></strong>.</p><p>Dentro da classe filha, podemos usar o <code>$this</code> para referenciar qualquer propriedade ou método definido no pai, como se estivessem definidos dentro da classe filha.</p><p>Vale a pena notar que, embora possamos acessar as propriedades e métodos do pai a partir do filho, não podemos fazer o contrário.</p><p>A classe pai não sabe nada sobre a classe filha.</p><h3 id="propriedades-e-m-todos-protected-no-php"><strong>Propriedades e métodos <code>protected</code> no PHP</strong></h3><p>Agora que introduzimos a herança, podemos discutir o <code>protected</code>. Já vimos como podemos usar o modificador de acesso <code>public</code> para definir propriedades e métodos que podem ser chamados de fora de uma classe, pelo <em><em>público.</em></em></p><p>Propriedades e métodos <code>private</code> só podem ser acessados ​​dentro da classe.</p><p>Propriedades e métodos <code>protected</code> podem ser acessados somente ​​dentro da própria classe e das classes filhas.</p><h3 id="como-substituir-m-todos-no-php"><strong>Como substituir métodos no PHP</strong></h3><p>O que acontece se tivermos um método <code>comer()</code> em <code>Animal</code> e quisermos personalizá-lo em <code>Cachorro</code>? Podemos <strong><strong>substituir</strong></strong> esse método.</p><pre><code class="language-php">class Animal {
  public $idade;

  public function comer() {
    echo 'o animal está comendo';
  }
}

class Cachorro extends Animal {
  public function comer() {
    echo 'o cachorro está comendo';
  }
}
</code></pre><p>Agora, qualquer instância de <code>Cachorro</code> usará a implementação do método <code>comer()</code> da classe <code>Cachorro</code>.</p><h3 id="propriedades-e-m-todos-est-ticos-no-php"><strong>Propriedades e métodos estáticos no PHP</strong></h3><p>Vimos como definir propriedades e métodos que pertencem <strong><strong>à instância de uma classe</strong></strong>, um objeto.</p><p>Por vezes, será útil atribuí-los à própria classe.</p><p>Quando isso acontece, nós os chamamos de <strong><strong>static</strong></strong> e, para referenciá-los ou chamá-los, não precisamos mais criar um objeto da classe.</p><p>Vamos começar com propriedades estáticas. Nós os definimos com a palavra-chave <code>static</code>:</p><pre><code class="language-php">class Utils {
  public static $versao = '1.0';
}
</code></pre><p>Nós fazemos referência a elas dentro da classe usando a palavra-chave <code>self</code>, que aponta para a classe:</p><pre><code class="language-php">self::$versao;
</code></pre><p>Fora da classe, nós a referenciamos desta forma:</p><pre><code class="language-php">
Utils::versao
</code></pre><p>Para os métodos estáticos, é assim:</p><pre><code class="language-php">class Utils {
  public static function versao() {
    return '1.0';
  }
}
</code></pre><p>Do lado de fora da classe, podemos chamá-los desta forma:</p><pre><code class="language-php">Utils::versao();
</code></pre><p>Dentro da classe, podemos referenciá-los usando a palavra-chave <code>self</code>, que se refere à própria classe:</p><pre><code class="language-php">self::versao();
</code></pre><h3 id="como-comparar-objetos-no-php"><strong>Como comparar objetos no PHP</strong></h3><p>Quando falamos dos operadores que mencionei, lá no início, temos o operador <code>==</code> para verificar se dois valores são iguais e <code>===</code> para verificar se são idênticos.</p><p>A principal diferença é que <code>==</code> verifica o conteúdo do objeto, por exemplo se a string <code>'5'</code> é igual ao número <code>5</code>, mas não é idêntico a ele.</p><p>Quando usamos o operador <code>==</code> para comparar objetos, verificamos se os dois objetos possuem a mesma classe e possuem os mesmos valores atribuídos a eles.</p><p>Já <code>===</code>, por outro lado, verifica se eles também se referem à mesma instância (objeto).</p><p>Por exemplo:</p><pre><code class="language-php">class Cachorro {
  public $nome = 'Cachorro bom';
}

$roger = new Cachorro();
$syd = new Cachorro();

echo $roger == $syd; // true

echo $roger === $syd; // false
</code></pre><h3 id="como-iterar-sobre-propriedades-de-objeto-no-php"><strong>Como iterar sobre propriedades de objeto no PHP</strong></h3><p>Você pode iterar sobre todas as propriedades públicas em um objeto usando um laço <code>foreach</code>, assim:</p><pre><code class="language-php">class Cachorro {
  public $nome = 'Cachorro bom';
  public $idade = 10;
  public $cor = 'cinza';
}

$cachorro = new Cachorro();

foreach ($cachorro as $chave =&gt; $valor) {
  echo $chave . ': ' . $valor . '&lt;br&gt;';
}
</code></pre><h3 id="como-clonar-objetos-no-php"><strong>Como clonar objetos no PHP</strong></h3><p>Quando você tem um objeto, você pode cloná-lo usando a palavra-chave <code>clone</code>:</p><pre><code class="language-php">class Cachorro {
  public $nome;
}

$roger = new Cachorro();
$roger-&gt;nome = 'Roger';

$syd = clone $roger;
</code></pre><p>Isso executa um <em><em>clone superficial</em></em>, o que significa que as referências a outras variáveis ​​serão copiadas como referências – não haverá uma "clonagem recursiva" delas.</p><p>Porém, para fazer um <em><em>clone profundo</em></em>, você terá um pouco mais de trabalho.</p><h3 id="o-que-s-o-m-todos-m-gicos-no-php"><strong>O que são métodos mágicos no PHP?</strong></h3><p>Métodos mágicos são métodos especiais que definimos em classes para realizar algum comportamento quando algo especial acontece.</p><p>Por exemplo, quando uma propriedade é definida, acessada ou quando o objeto é clonado.</p><p>Já vimos o <code>__construct()</code> antes.</p><p>Esse é um método mágico.</p><p>Há outros, no entanto. Por exemplo, se tivermos uma propriedade booleana chamada "clonado", quando o objeto for clonado, se quisermos definir ela como <em><em>true</em></em>, podemos fazer o seguinte:</p><pre><code class="language-php">class Cachorro {
  public $nome;

  public function __clone() {
    $this-&gt;clonado = true;
  }
}

$roger = new Cachorro();
$roger-&gt;nome = 'Roger';

$syd = clone $roger;
echo $syd-&gt;clonado;
</code></pre><p>Outros métodos mágicos que temos são: <code>__call()</code>, <code>__get()</code>, <code>__set()</code>, <code>__isset()</code>, <code>__toString()</code>, entre outros.</p><p>Você pode ver a lista completa deles <a href="https://www.php.net/manual/pt_BR/language.oop5.magic.php">aqui</a>.</p><h2 id="como-incluir-outros-arquivos-php"><strong>Como incluir outros arquivos PHP</strong></h2><p>Agora que terminamos de falar sobre os recursos orientados a objetos do PHP, vamos explorar alguns outros assuntos interessantes!</p><p>Dentro de um arquivo PHP, você pode incluir outros arquivos PHP. Temos os seguintes métodos, todos usados ​​nesse exemplo, mas que são muito diferentes entre si: <code>include</code>, <code>include_once</code>, <code>require</code> e <code>require_once</code>.</p><p>O <code>include</code> carrega o conteúdo de outro arquivo PHP, usando um caminho relativo.</p><p>O <code>require</code> faz o mesmo, mas, se houver algum erro ao carregá-lo, o programa para. O <code>include</code>, por sua vez, apenas gera um aviso.</p><p>Você pode decidir usar um ou outro dependendo do que precisar. Se você quiser que seu programa interrompa o processo se não conseguir importar o arquivo, use <code>require</code>.</p><p><code>include_once</code> e <code>require_once</code> fazem a mesma coisa que suas funções correspondentes sem <code>_once</code>, só que garantem que o arquivo seja incluído/solicitado apenas uma vez durante a execução do programa.</p><p>Isso é útil, por exemplo, se você tiver vários arquivos carregando o mesmo arquivo e desejar evitar carregá-lo mais de uma vez.</p><p>Particularmente, minha regra geral é nunca usar o <code>include</code> ou o <code>require</code>, porque podemos carregar o mesmo arquivo duas vezes. E o <code>include_once</code> e <code>require_once</code> nos ajudam a evitar esse problema.</p><p>Use o <code>include_once</code> quando quiser carregar um arquivo condicionalmente, por exemplo, "carregar este arquivo em vez daquele". Em todos os outros casos, use <code>require_once</code>.</p><p>Aqui está um exemplo:</p><pre><code class="language-php">require_once('test.php');

// agora temos acesso às funções, classes
// e variáveis definidas no arquivo `test.php`</code></pre><p>A sintaxe acima inclui o arquivo <code>test.php</code> da pasta atual, o arquivo onde está esse código.</p><p>Você pode usar caminhos relativos também:</p><pre><code class="language-php">require_once('../test.php');
</code></pre><p>Incluir um arquivo da pasta pai ou ir para uma subpasta:</p><pre><code class="language-php">require_once('test/test.php');
</code></pre><p>Ou usar caminhos absolutos:</p><pre><code class="language-php">require_once('/var/www/test/file.php');
</code></pre><p>Nas bases de código moderno do PHP que usam frameworks, os arquivos geralmente são carregados automaticamente. Então, você terá menos necessidade de usar as funções acima.</p><h2 id="constantes-fun-es-e-vari-veis-teis-para-sistema-de-arquivos-no-php"><strong>Constantes, funções e variáveis ​​úteis para sistema de arquivos no PHP</strong></h2><p>Falando em caminhos, o PHP oferece vários utilitários para ajudar a trabalhar com caminhos.</p><p>Pode-se obter o caminho completo do arquivo atual usando:</p><ul><li><code>__FILE__</code>, uma <em><em>constante mágica</em></em></li><li><code>$_SERVER['SCRIPT_FILENAME']</code> (falaremos mais sobre <code>$_SERVER</code> depois!)</li></ul><p>Você pode obter o caminho completo da pasta onde o arquivo atual está, usando:</p><ul><li>a função <a href="https://www.php.net/manual/en/function.getcwd.php"><code>getcwd()</code></a></li><li><code>__DIR__</code>, outra constante mágica</li><li>combinar <code>__FILE__</code> com <code>dirname()</code> para obter o caminho completo da pasta atual: <code>dirname(__FILE__)</code></li><li>usar o <code>$_SERVER['DOCUMENT_ROOT']</code></li></ul><h2 id="como-lidar-com-erros-no-php"><strong>Como lidar com erros no PHP</strong></h2><p>Todo programador comete erros. Somos humanos, afinal de contas.</p><p>Podemos esquecer um ponto e vírgula. Ou usar o nome da variável errado. Ou passar o argumento errado para uma função.</p><p>No PHP, temos:</p><ul><li>Warnings (avisos)</li><li>Notices (observações)</li><li>Errors (erros)</li></ul><p>Os dois primeiros são erros menores e não interrompem a execução do programa. O PHP imprimirá uma mensagem e pronto.</p><p>Já os <em><em>Errors</em></em> encerram a execução do programa e imprimem uma mensagem informando o motivo.</p><p>Existem muitos tipos diferentes de erros, como erros de análise, erros fatais de tempo de execução, erros fatais de inicialização e muito mais.</p><p>São todos erros.</p><p>Eu disse que "o PHP imprime uma mensagem", mas... onde?</p><p>Vai depender da sua configuração.</p><p>No modo de desenvolvimento, é comum registrar erros de PHP diretamente na página da web, ou em um log de erros.</p><p>Você quer ver esses erros o mais cedo possível, para poder corrigi-los.</p><p>Em produção, por outro lado, você não quer mostrá-los na página, mas, ainda assim, quer saber sobre eles.</p><p>Então, o que você faz? Você os registra no log de erros.</p><p>Isso tudo é decidido na configuração do PHP.</p><p>Ainda não falamos sobre isso, mas existe um arquivo na configuração do servidor que decide muitas coisas sobre como o PHP é executado.</p><p>Ele é chamado <code>php.ini</code>.</p><p>A localização exata deste arquivo depende de sua configuração.</p><p>Para descobrir onde ele está, a maneira mais fácil é adicioná-lo no código de um arquivo PHP, como no exemplo abaixo, e executar esse arquivo no navegador:</p><pre><code class="language-php">&lt;?php
phpinfo();
?&gt;
</code></pre><p>Você verá o local em "Loaded Configuration File" (Arquivo de configuração carregado):</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.42.41.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_13.42.41" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_13.42.41.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_13.42.41.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_13.42.41.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.42.41.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1460" loading="lazy"></figure><p>Neste caso, ele está em <code>/Applications/MAMP/bin/php/php8.1.0/conf/php.ini</code>.</p><p>Observe que as informações geradas pelo <code>phpinfo()</code> contém muitas outras informações úteis. Lembre-se disso.</p><p>Usando o MAMP, você pode abrir a pasta do aplicativo MAMP e abrir o arquivo <code>bin/php</code>. Vá em sua versão específica do PHP (8.1.0, nesse caso) e entre em <code>conf</code>. Lá, você encontrará o arquivo <code>php.ini</code>:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.11.28.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_12.11.28" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_12.11.28.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_12.11.28.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_12.11.28.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.11.28.jpg 1954w" sizes="(min-width: 1200px) 1200px" width="1954" height="1280" loading="lazy"></figure><p>Abra esse arquivo em um editor.</p><p>Ele terá uma lista realmente longa de configurações, com uma ótima documentação embutida para cada item.</p><p>Estamos particularmente interessados ​​em <code>display_errors</code>:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.13.16.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_12.13.16" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_12.13.16.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_12.13.16.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_12.13.16.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.13.16.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1580" loading="lazy"></figure><p>Em produção, você vai querer que seu valor seja <code>Off</code>, diferente do que vemos no documento acima (onde ele está <code>On</code>).</p><p>Os erros não aparecerão mais no site, mas você os verá no arquivo <code>php_error.log</code>, na pasta <code>logs</code> do MAMP, neste caso:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.16.01.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_12.16.01" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_12.16.01.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_12.16.01.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_12.16.01.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.16.01.jpg 1954w" sizes="(min-width: 1200px) 1200px" width="1954" height="1280" loading="lazy"></figure><p>Este arquivo estará em uma pasta diferente, dependendo da sua configuração.</p><p>Você é quem define o local no seu arquivo <code>php.ini</code>:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.17.12.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_12.17.12" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_12.17.12.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_12.17.12.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_12.17.12.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.17.12.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1381" loading="lazy"></figure><p>O log de erros conterá todas as mensagens de erro que seu aplicativo gera:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.17.55.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_12.17.55" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_12.17.55.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_12.17.55.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_12.17.55.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_12.17.55.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1180" loading="lazy"></figure><p>Você pode adicionar informações ao log de erros usando a função <a href="https://www.php.net/manual/en/function.error-log.php"><code>error_log()</code></a>:</p><pre><code class="language-php">error_log('teste');
</code></pre><p>É comum usar um serviço de logs para erros, como o <a href="https://github.com/Seldaek/monolog">Monolog</a>.</p><h2 id="como-lidar-com-exce-es-no-php"><strong>Como lidar com exceções no PHP</strong></h2><p>Às vezes, os erros são inevitáveis, como se algo completamente imprevisível acontecesse.</p><p>Muitas vezes, porém, podemos pensar no futuro e escrever um código que possa interceptar um erro e fazer algo sensato quando isso acontecer, como mostrar uma mensagem de erro útil para o usuário ou tentar uma solução alternativa.</p><p>Fazemos isso usando <strong><strong>exceções</strong></strong>.</p><p>Exceções são usadas para que nós, desenvolvedores, estejamos cientes de um problema.</p><p>Envolvemos um código, potencialmente gerador de uma exceção, em um bloco <code>try</code> e escrevemos um bloco <code>catch</code> logo após. Esse bloco catch será executado se houver uma exceção no bloco try:</p><pre><code class="language-php">try {
  // fazer alguma coisa
} catch (Throwable $e) {
  // podemos fazer algo aqui se ocorrer uma exceção
}
</code></pre><p>Observe que um objeto <code>Exception $e</code> está sendo passado para o bloco <code>catch</code>. Podemos inspecioná-lo para obter mais informações sobre a exceção, assim:</p><pre><code class="language-php">try {
  // fazer alguma coisa
} catch (Throwable $e) {
  echo $e-&gt;getMessage();
}
</code></pre><p>Vamos ver isso na prática.</p><p>Digamos que, por engano, eu divida um número por zero:</p><pre><code class="language-php">echo 1 / 0;
</code></pre><p>Isso acionará um erro fatal e o programa será interrompido nessa linha:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.12.59.jpg" class="kg-image" alt="Screen_Shot_2022-06-26_at_20.12.59" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-26_at_20.12.59.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-26_at_20.12.59.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.12.59.jpg 1280w" sizes="(min-width: 1200px) 1200px" width="1280" height="740" loading="lazy"></figure><p>Envolvendo a operação em um bloco try e imprimindo a mensagem de erro no bloco catch, o programa termina com sucesso, informando o problema:</p><pre><code class="language-php">try {
  echo 1 / 0;
} catch (Throwable $e) {
  echo $e-&gt;getMessage();
}
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.13.36.jpg" class="kg-image" alt="Screen_Shot_2022-06-26_at_20.13.36" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-26_at_20.13.36.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-26_at_20.13.36.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.13.36.jpg 1280w" sizes="(min-width: 1200px) 1200px" width="1280" height="740" loading="lazy"></figure><p>Claro que este é um exemplo simples, mas você pode ver o benefício, que é poder interceptar o problema.</p><p>Cada exceção tem uma classe diferente. Por exemplo, podemos pegá-la como <a href="https://www.php.net/manual/en/class.divisionbyzeroerror.php"><code>DivisionByZeroError</code></a>, nos permitindo filtrar os possíveis problemas e tratá-los de maneiras diferente.</p><p>Eu posso ter também um catch-all para qualquer tipo de erro no final, assim:</p><pre><code class="language-php">try {
  echo 1 / 0;
} catch (DivisionByZeroError $e) {
  echo 'Ooops I divided by zero!';
} catch (Throwable $e) {
  echo $e-&gt;getMessage();
}
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.15.47.jpg" class="kg-image" alt="Screen_Shot_2022-06-26_at_20.15.47" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-26_at_20.15.47.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-26_at_20.15.47.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.15.47.jpg 1280w" sizes="(min-width: 1200px) 1200px" width="1280" height="740" loading="lazy"></figure><p>Também podemos anexar um bloco <code>finally {}</code> no final do try/catch para executar alguma coisa após o código ser executado com sucesso, sem problemas ou houver um problema:</p><pre><code class="language-php">try {
  echo 1 / 0;
} catch (DivisionByZeroError $e) {
  echo 'Ooops I divided by zero!';
} catch (Throwable $e) {
  echo $e-&gt;getMessage();
} finally {
  echo ' ...done!';
}
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.17.33.jpg" class="kg-image" alt="Screen_Shot_2022-06-26_at_20.17.33" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-26_at_20.17.33.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-26_at_20.17.33.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-26_at_20.17.33.jpg 1280w" sizes="(min-width: 1200px) 1200px" width="1280" height="740" loading="lazy"></figure><p>Você pode usar as <a href="https://www.php.net/manual/pt_BR/reserved.exceptions.php">exceções internas</a> fornecidas pelo PHP, ou se preferir, pode criar suas próprias exceções.</p><h2 id="como-trabalhar-com-datas-no-php"><strong>Como trabalhar com datas no PHP</strong></h2><p>Trabalhar com datas e horas é muito comum na programação. Vamos ver o que o PHP oferece.</p><p>Podemos obter o timestamp atual (número de segundos desde 1º de janeiro de 1970 00:00:00 GMT) usando <a href="https://www.php.net/manual/en/function.time.php"><code>time()</code></a>:</p><pre><code class="language-php">$timestamp = time();
</code></pre><p>Quando temos um registro de data/hora, podemos formatá-lo no formato de data que preferirmos, usando o <a href="https://www.php.net/manual/en/function.date.php"><code>date()</code></a>:</p><pre><code class="language-php">echo date('Y-m-d', $timestamp);
</code></pre><p><code>Y</code> é a representação de 4 dígitos do ano, <code>m</code> é o número do mês (com duas casas) e <code>d</code> é o número do dia do mês(com duas casas também).</p><p>Veja a <a href="https://www.php.net/manual/pt_BR/datetime.format.php">lista completa de caracteres que você pode usar para formatar datas aqui</a>.</p><p>Podemos converter qualquer data em um timestamp usando <a href="https://www.php.net/manual/en/function.strtotime.php"><code>strtotime()</code></a>, que pega uma string com uma representação textual de uma data e a converte no número de segundos desde 1º de janeiro de 1970:</p><pre><code class="language-php">echo strtotime('now');
echo strtotime('4 May 2020');
echo strtotime('+1 day');
echo strtotime('+1 month');
echo strtotime('last Sunday');
</code></pre><p>...é bem flexível.</p><p>Para datas, também é comum usar bibliotecas, que oferecem muito mais funcionalidades do que a linguagem sozinha pode oferecer. Uma boa opção é a <a href="https://carbon.nesbot.com/">Carbon</a>.</p><h2 id="como-usar-constantes-e-enums-no-php"><strong>Como usar constantes e enums no PHP</strong></h2><p>Podemos definir constantes em PHP usando a função <code>define()</code>:</p><pre><code class="language-php">define('TESTE', 'algum valor');
</code></pre><p>Depois, usamos <code>TESTE</code> como se fosse uma variável, mas sem o sinal <code>$</code>:</p><pre><code class="language-php">define('TESTE', 'algum valor');

echo TESTE;
</code></pre><p>Usamos identificadores maiúsculos como uma convenção para constantes, mas não é obrigatório.</p><p>Curiosamente, dentro das classes podemos definir propriedades constantes usando a palavra chave <code>const</code>:</p><pre><code class="language-php">class Cachorro {
  const BREED = 'Husky Siberiano';
}
</code></pre><p>Por padrão elas são <code>public</code>, mas podemos marcá-las como <code>private</code> ou <code>protected</code>:</p><pre><code class="language-php">class Cachorro {
  private const BREED = 'Husky Siberiano';
}
</code></pre><p>Já os Enums nos permitem agrupar constantes sob uma "raiz" comum. Por exemplo, se quiser ter um enum <code>Status</code> que tenha 3 estados: <code>COMENDO</code>, <code>DORMINDO</code> e <code>CORRENDO</code>, os 3 estados do dia de um cachorro. :)</p><p>Então, você tem:</p><pre><code class="language-php">enum Status {
  case COMENDO;
  case DORMINDO;
  case CORRENDO;
}
</code></pre><p>Agora, podemos referenciar essas constantes desta forma:</p><pre><code class="language-php">class Cachorro {
  public Status $status;
}

$cachorro = new Cachorro();

$cachorro-&gt;status = Status::CORRENDO;

if ($cachorro-&gt;status == Status::DORMINDO) {
  //...
}
</code></pre><p>Enums são objetos, que podem ter métodos e muito mais recursos do que podemos abordar aqui nesta breve introdução.</p><h2 id="como-usar-o-php-como-uma-plataforma-de-desenvolvimento-de-aplicativos-da-web"><strong>Como usar o PHP como uma plataforma de desenvolvimento de aplicativos da web</strong></h2><p>O PHP é uma linguagem do lado do servidor e normalmente é usada de duas maneiras.</p><p>Uma delas é dentro de uma página HTML, então o PHP é usado para "adicionar" coisas ao HTML que é definido manualmente no arquivo <code>.php</code>. Esta é uma maneira perfeitamente boa de usar o PHP.</p><p>A outra maneira considera o PHP mais como o motor responsável por gerar uma "aplicação". Você não escreve o HTML em um arquivo <code>.php</code>, mas usa uma linguagem de modelagem para gerar o HTML, e tudo é gerenciado pelo que chamamos de <strong><strong>framework</strong></strong>.</p><p>Isso é o que acontece quando você usa um framework moderno como o Laravel.</p><p>Eu consideraria a primeira maneira um pouco "fora de moda" hoje em dia. Se você está apenas começando, no entanto, deve conhecer esses dois estilos diferentes de se utilizar o PHP.</p><p>Pense em um framework, no entanto, como um "modo fácil" de fazer as coisas, pois fornecem ferramentas para lidar com roteamento, acessar dados de um banco de dados e facilitam a criação de um aplicativo mais seguro. E eles tornam tudo mais rápido para desenvolver.</p><p>Não falaremos sobre o uso de frameworks neste manual, apenas sobre os blocos de construção básicos e fundamentais do PHP. Eles são essenciais, e todo desenvolvedor PHP deve conhecê-los.</p><p>Apenas saiba que, "no mundo real", você pode preferir a maneira que usa o framework, em vez de fazer as coisas com os recursos de <em><em>nível inferior</em></em> oferecidos pelo PHP.</p><p>Isso não se aplica apenas ao PHP, é claro – é um "problema" que acontece com qualquer linguagem de programação.</p><h3 id="como-lidar-com-requisi-es-http-no-php"><strong>Como lidar com requisições HTTP no PHP</strong></h3><p>Vamos começar com o tratamento de requisições HTTP.</p><p>O PHP oferece roteamento baseado em arquivo por padrão. Você cria um arquivo <code>index.php</code> e ele responde no caminho <code>/</code>.</p><p>Vimos isso quando fizemos o "Hello World" de exemplo no começo.</p><p>Da mesma forma, você pode criar um arquivo <code>test.php</code> e, automaticamente, esse será o arquivo que o Apache servirá no caminho <code>/test</code>.</p><h3 id="como-usar-_get-_post-e-_request-no-php"><strong>Como usar <code>$_GET</code>, <code>$_POST</code> e <code>$_REQUEST</code> no PHP</strong></h3><p>Os arquivos respondem a todas as requisições HTTP, incluindo GET, POST e outros verbos.</p><p>Em qualquer requisição, você pode acessar os dados da string de consulta usando o objeto <code>$_GET</code>. Esses objetos são conhecidos como <em><em>superglobal</em></em> e estão disponíveis automaticamente em todos os nossos arquivos PHP.</p><p>Obviamente, eles são mais úteis em requisições GET, porém existem outras requisições que podem enviar dados como uma string de consulta.</p><p>Para requisições POST, PUT e DELETE, é mais provável que você precise dos dados postados como dados codificados por URL ou usando o objeto FormData, que o PHP disponibiliza, usando o objeto <code>$_POST</code>.</p><p>Há, também, o objeto <code>$_REQUEST</code>, que contém tanto o <code>$_GET</code> quanto o <code>$_POST</code> combinados em uma única variável.</p><h3 id="como-usar-o-objeto-_server-no-php"><strong>Como usar o objeto <code>$_SERVER</code> no PHP</strong></h3><p>Também temos a variável superglobal <code>$_SERVER</code>, que você usa para obter muitas informações úteis.</p><p>Você viu como usar <code>phpinfo()</code> antes. Vamos usá-lo novamente para ver o que <code>$_SERVER</code> nos oferece.</p><p>No seu <code>index.php</code>, no diretório raiz do MAMP, execute:</p><pre><code class="language-php">&lt;?php
phpinfo();
?&gt;
</code></pre><p>Em seguida, abra a página em <a href="http://localhost:8888/">localhost:8888</a> e pesquise por <code>$_SERVER</code>. Você verá toda a configuração armazenada e todos valores atribuídos:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.46.50.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_13.46.50" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_13.46.50.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_13.46.50.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_13.46.50.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.46.50.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1460" loading="lazy"></figure><p>Os valores mais importantes que você pode querer usar são:</p><ul><li><code>$_SERVER['HTTP_HOST']</code></li><li><code>$_SERVER['HTTP_USER_AGENT']</code></li><li><code>$_SERVER['SERVER_NAME']</code></li><li><code>$_SERVER['SERVER_ADDR']</code></li><li><code>$_SERVER['SERVER_PORT']</code></li><li><code>$_SERVER['DOCUMENT_ROOT']</code></li><li><code>$_SERVER['REQUEST_URI']</code></li><li><code>$_SERVER['SCRIPT_NAME']</code></li><li><code>$_SERVER['REMOTE_ADDR']</code></li></ul><h3 id="como-usar-formul-rios-no-php"><strong>Como usar formulários no PHP</strong></h3><p>Os formulários são a forma como a plataforma web permite que os usuários interajam com uma página e enviem dados para o servidor.</p><p>Aqui está um formulário simples em HTML:</p><pre><code class="language-php">&lt;form&gt;
  &lt;input type="text" name="name" /&gt;
  &lt;input type="submit" /&gt;
&lt;/form&gt;
</code></pre><p>Você pode colocá-lo no seu arquivo <code>index.php</code> da mesma forma como foi inserido no <code>index.html</code>.</p><p>Um arquivo PHP assume por padrão que você está escrevendo HTML nele, com alguns "extras de PHP" usando <code>&lt;?php ?&gt;</code> para que o servidor web possa enviá-lo no client. Às vezes, a parte do PHP ocupa a página toda, e é aí que você gera todo o HTML via PHP – é o oposto da abordagem que estamos adotando aqui agora.</p><p>Então, temos o arquivo <code>index.php</code> que gerou o formulário usando HTML simples:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.53.47.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_13.53.47" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_13.53.47.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_13.53.47.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_13.53.47.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.53.47.jpg 1756w" sizes="(min-width: 1200px) 1200px" width="1756" height="926" loading="lazy"></figure><p>Pressionando o botão Submit (Enviar), ele fará uma requisição GET para o mesmo URL enviando os dados via string de consulta. Note que o URL agora mudou para <a href="http://localhost:8888/?name=test">localhost:8888/?name=test</a>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.56.46.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_13.56.46" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_13.56.46.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_13.56.46.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_13.56.46.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.56.46.jpg 1756w" sizes="(min-width: 1200px) 1200px" width="1756" height="926" loading="lazy"></figure><p>Podemos adicionar um código para verificar se esse parâmetro está definido usando a função <a href="https://www.php.net/manual/en/function.isset.php"><code>isset()</code></a>:</p><pre><code class="language-php">&lt;form&gt;
  &lt;input type="text" name="name" /&gt;
  &lt;input type="submit" /&gt;
&lt;/form&gt;

&lt;?php
if (isset($_GET['name'])) {
  echo '&lt;p&gt;The name is ' . $_GET['name'];
}
?&gt;
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.56.35.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_13.56.35" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_13.56.35.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_13.56.35.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_13.56.35.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.56.35.jpg 1756w" sizes="(min-width: 1200px) 1200px" width="1756" height="926" loading="lazy"></figure><p>Viu? Podemos obter as informações da string de consulta da <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Methods/GET">requisição GET</a> por meio do <code>$_GET</code>.</p><p>O que você costuma fazer com formulários, porém, é executar uma requisição POST:</p><pre><code class="language-php">&lt;form **method="POST"**&gt;
  &lt;input type="text" name="name" /&gt;
  &lt;input type="submit" /&gt;
&lt;/form&gt;

&lt;?php
if (isset($_POST['name'])) {
  echo '&lt;p&gt;The name is ' . $_POST['name'];
}
?&gt;
</code></pre><p>Agora, veja que, desse modo, temos as mesmas informações, mas o URL não mudou. As informações do formulário não foram anexadas ao URL.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.59.54.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_13.59.54" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_13.59.54.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_13.59.54.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_13.59.54.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_13.59.54.jpg 1756w" sizes="(min-width: 1200px) 1200px" width="1756" height="926" loading="lazy"></figure><p>Isso ocorre porque agora estamos usando uma <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Methods/POST">requisição POST</a>, que envia os dados ao servidor de uma forma diferente, por meio de dados codificados por URL.</p><p>Como mencionado acima, o PHP ainda enviará o <code>index.php</code>, pois ainda estamos enviando dados para o mesmo URL em que o formulário está.</p><p>Esse código está todo misturado, mas podemos separar o manipulador de requisição (do formulário) e o código que gera o formulário.</p><p>Então, teremos em <code>index.php</code>:</p><pre><code class="language-php">&lt;form **method="POST" action="/post.php"**&gt;
  &lt;input type="text" name="name" /&gt;
  &lt;input type="submit" /&gt;
&lt;/form&gt;
</code></pre><p>Podemos criar um arquivo chamado <code>post.php</code> com:</p><pre><code class="language-php">&lt;?php
if (isset($_POST['name'])) {
  echo '&lt;p&gt;The name is ' . $_POST['name'];
}
?&gt;
</code></pre><p>O PHP exibirá este conteúdo agora depois de enviarmos o formulário, porque definimos o atributo <code>action</code> do HTML no formulário.</p><p>Embora esse exemplo seja bem simples, poderíamos ter no <code>post.php</code>, por exemplo, um código para salvar os dados no banco de dados ou em um arquivo.</p><h3 id="como-usar-cabe-alhos-http-no-php"><strong>Como usar cabeçalhos HTTP no PHP</strong></h3><p>O PHP permite definir os cabeçalhos HTTP de uma resposta (chamada de <em>response</em>) por meio da função <code>header()</code>.</p><p><a href="https://flaviocopes.com/http-request-headers/">Os cabeçalhos HTTP</a> (texto em inglês) são uma maneira de retornar informações ao navegador.</p><p>Podemos dizer que a página gera um 500 Internal Server Error:</p><pre><code class="language-php">&lt;?php
header('HTTP/1.1 500 Internal Server Error');
?&gt;
</code></pre><p>Agora, você verá esse status ao acessar a página com as <a href="https://flaviocopes.com/browser-dev-tools/">Ferramentas do desenvolvedor do navegador</a> aberta (texto em inglês):</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.10.29.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_14.10.29" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_14.10.29.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_14.10.29.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_14.10.29.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.10.29.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1292" loading="lazy"></figure><p>Podemos definir também o <code>content/type</code> de uma response:</p><pre><code class="language-php">header('Content-Type: text/json');
</code></pre><p>Podemos forçar um redirecionamento 301:</p><pre><code class="language-php">header('HTTP/1.1 301 Moved Permanently');
header('Location: https://flaviocopes.com');
</code></pre><p>Podemos usar cabeçalhos para dizer ao navegador para "armazenar a página em cache" ou "não armazenar a página em cache" e muito mais.</p><h3 id="como-usar-cookies-no-php"><strong>Como usar cookies no PHP</strong></h3><p>Os cookies são um recurso do navegador.</p><p>Quando enviamos uma response ao navegador, podemos definir um cookie que será armazenado pelo navegador, do lado do client.</p><p>Então, cada requisição que o navegador fizer incluirá o cookie de volta para nós.</p><p>Podemos fazer muitas coisas com cookies. Eles são usados ​​principalmente para criar uma experiência personalizada sem que você precise fazer <em>login</em> em um serviço.</p><p>É importante observar que os cookies são específicos do domínio. Portanto, só podemos ler os cookies que definimos no domínio atual do nosso aplicativo, não os cookies de outra aplicação.</p><p>Mas o JavaScript pode ler cookies (a menos que sejam <em><em>cookies HttpOnly</em></em>, mas aí estaríamos começando a entrar em um assunto interminável) e, por isso, os cookies não devem armazenar informações sensíveis.</p><p>Podemos usar o PHP para ler o valor de um cookie referenciando a variável superglobal <code>$_COOKIE</code>:</p><pre><code class="language-php">if (isset($_COOKIE['name'])) {
  $name = $_COOKIE['name'];
}
</code></pre><p>A função <a href="https://www.php.net/manual/en/function.setcookie.php"><code>setcookie()</code></a> permite definir um cookie:</p><pre><code class="language-php">setcookie('name', 'Flavio');
</code></pre><p>Podemos adicionar também um terceiro parâmetro para dizer quando o cookie vai expirar. Se omitido, o cookie expira no final da sessão/quando o navegador é fechado.</p><p>O código abaixo configura o cookie para expirar em 7 dias:</p><pre><code class="language-php">setcookie('name', 'Flavio', time() + 3600 * 24 * 7);
</code></pre><p>Podemos armazenar apenas uma quantidade limitada de dados em um cookie. Os usuários podem limpá-los no lado do client quando limpam os dados do navegador.</p><p>Além disso, eles são específicos para aquele navegador/dispositivo. Portanto, podemos definir um cookie no navegador do usuário, mas se ele mudar de navegador ou dispositivo, o cookie não estará disponível.</p><p>Vamos fazer um exemplo simples com o formulário que usamos antes. Vamos armazenar o nome inserido como um cookie:</p><pre><code class="language-php">&lt;?php
if (isset($_POST['name'])) {
  setcookie('name', $_POST['name']);
}
if (isset($_POST['name'])) {
  echo '&lt;p&gt;Hello ' . $_POST['name'];
} else {
  if (isset($_COOKIE['name'])) {
    echo '&lt;p&gt;Hello ' . $_COOKIE['name'];
  }
}
?&gt;

&lt;form method="POST"&gt;
  &lt;input type="text" name="name" /&gt;
  &lt;input type="submit" /&gt;
&lt;/form&gt;
</code></pre><p>Adicionei algumas condicionais para tratar os casos em que o cookie já está definido, para mostrar o nome logo após o envio do formulário, ou quando o cookie ainda não estiver definido (ele será definido apenas para a próxima requisição HTTP).</p><p>Se você abrir as Ferramentas do desenvolvedor do navegador, deverá ver o cookie na guia Armazenamento (ou <em>Storage</em>).</p><p>A partir daí, você pode inspecionar seu valor e excluí-lo, se desejar.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.46.09.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_14.46.09" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_14.46.09.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_14.46.09.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_14.46.09.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.46.09.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1512" loading="lazy"></figure><h3 id="como-usar-sess-es-baseadas-em-cookies-no-php"><strong>Como usar sessões baseadas em cookies no PHP</strong></h3><p>Um caso de uso muito interessante para cookies são as sessões baseadas em cookies.</p><p>O PHP nos oferece uma maneira muito fácil de criar uma sessão baseada em cookies usando <code>session_start()</code>.</p><p>Em um arquivo PHP, adicione:</p><pre><code class="language-php">&lt;?php
session_start();
?&gt;
</code></pre><p>Agora abra-o no navegador.</p><p>Você verá um novo cookie nomeado por padrão como <code>PHPSESSID</code> com um valor atribuído.</p><p>Esse é o ID da sessão. Ele será enviado para cada nova requisição e o PHP o usará para identificar a sessão.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.51.53.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_14.51.53" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_14.51.53.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_14.51.53.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_14.51.53.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.51.53.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1590" loading="lazy"></figure><p>Da mesma forma que usamos cookies, agora podemos usar <code>$_SESSION</code> para armazenar as informações enviadas pelo usuário – que, desta vez, não são armazenadas no lado do client.</p><p>Apenas o ID da sessão é.</p><p>Os dados são armazenados no lado do servidor pelo PHP.</p><pre><code class="language-php">&lt;?php
session_start();

if (isset($_POST['name'])) {
  $_SESSION['name'] = $_POST['name'];
}
if (isset($_POST['name'])) {
  echo '&lt;p&gt;Hello ' . $_POST['name'];
} else {
  if (isset($_SESSION['name'])) {
    echo '&lt;p&gt;Hello ' . $_SESSION['name'];
  }
}
?&gt;

&lt;form method="POST"&gt;
  &lt;input type="text" name="name" /&gt;
  &lt;input type="submit" /&gt;
&lt;/form&gt;
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.53.24.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_14.53.24" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_14.53.24.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_14.53.24.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_14.53.24.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_14.53.24.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1590" loading="lazy"></figure><p>É claro, contudo, que isso funciona para casos de uso simples. Porém, quando há a transmissão de dados intensivamente, você precisará de um banco de dados.</p><p>Para limpar os dados da sessão, você pode chamar <code>session_unset()</code>.</p><p>Para limpar o cookie de sessão, use:</p><pre><code class="language-php">setcookie(session_name(), '');
</code></pre><h3 id="como-trabalhar-com-arquivos-e-pastas-no-php"><strong>Como trabalhar com arquivos e pastas no PHP</strong></h3><p>PHP é uma linguagem do lado do servidor. Uma das coisas úteis que ela fornece é o acesso ao sistema de arquivos.</p><p>Você pode verificar se existe um arquivo usando <code>file_exists()</code>:</p><pre><code class="language-php">file_exists('test.txt') // true
</code></pre><p>Ou obter o tamanho de um arquivo usando <code>filesize()</code>:</p><pre><code class="language-php">filesize('test.txt')
</code></pre><p>Você pode abrir um arquivo usando <code>fopen()</code>. Aqui, abrimos o arquivo <code>test.txt</code> em <strong><strong>modo somente leitura</strong></strong> e obtemos o que chamamos de <strong><strong>descritor do arquivo</strong></strong> em <code>$file</code>:</p><pre><code class="language-php">$file = fopen('test.txt', 'r')
</code></pre><p>Podemos encerrar o acesso ao arquivo chamando <code>fclose($fd)</code>.</p><p>É possível, também, ler o conteúdo de um arquivo e passar ele para uma variável assim:</p><pre><code class="language-php">$file = fopen('test.txt', 'r')

fread($file, filesize('test.txt'));

// OU

while (!feof($file)) {
	$data .= fgets($file, 5000);
}
</code></pre><p>A função <code>feof()</code> verifica se não chegamos ao final do arquivo, pois <code>fgets</code> lê 5.000 bytes por vez.</p><p>Você também pode ler um arquivo linha por linha usando <code>fgets()</code>:</p><pre><code class="language-php">$file = fopen('test.txt', 'r')

while(!feof($file)) {
  $line = fgets($file);
  // faça alguma coisa
}
</code></pre><p>Para gravar em um arquivo, você deve primeiro abri-lo no <strong><strong>modo de gravação</strong></strong> e depois usar a função <code>fwrite()</code>:</p><pre><code class="language-php">$data = 'test';
$file = fopen('test.txt', 'w')
fwrite($file, $data);
fclose($file);
</code></pre><p>Podemos excluir um arquivo usando <code>unlink()</code>:</p><pre><code class="language-php">unlink('test.txt')
</code></pre><p>Esses são os básicos, mas é claro que existem mais <a href="https://www.php.net/manual/pt_BR/ref.filesystem.php">funções para trabalhar com arquivos</a>.</p><h3 id="php-e-bancos-de-dados"><strong>PHP e bancos de dados</strong></h3><p>O PHP oferece várias bibliotecas integradas para trabalhar com bancos de dados, por exemplo:</p><ul><li><a href="https://www.php.net/manual/pt_BR/book.pgsql.php">PostgreSQL</a></li><li><a href="https://www.php.net/manual/en/set.mysqlinfo.php">MySQL</a> / MariaDB (página ainda não traduzida na documentação)</li><li><a href="https://www.php.net/manual/en/set.mongodb.php">MongoDB</a> (página ainda não traduzida na documentação)</li></ul><p>Não abordarei essa questão nesse manual, porque acho que esse é outro tópico gigante e que também exigiria que você aprendesse SQL.</p><p>Além disso, se você precisa de um banco de dados, deve usar um framework ou ORM que economize problemas de segurança, como injeção de SQL. O <a href="https://laravel.com/docs/eloquent">Eloquent do Laravel</a> é um ótimo exemplo disso.</p><h3 id="como-trabalhar-com-json-no-php"><strong>Como trabalhar com JSON no PHP</strong></h3><p><a href="https://flaviocopes.com/json/">JSON</a> (texto em inglês) é um formato de dados portátil que usamos para representar e enviar dados do cliente para o servidor.</p><p>Aqui está um exemplo JSON de um objeto que contém uma string e um número:</p><pre><code class="language-php">{
  "nome": "Flavio",
  "idade": 35
}
</code></pre><p>O PHP nos oferece duas funções para trabalhar com JSON:</p><ul><li><code>json_encode()</code> para codificar uma variável em JSON</li><li><code>json_decode()</code> para decodificar uma string JSON em um tipo de dados (objeto, array…)</li></ul><p>Exemplo:</p><pre><code class="language-php">$teste = ['a', 'b', 'c'];

$encodificado = json_encode($teste); // "["a","b","c"]" (a string)

$decodificado = json_decode($encodificado); // [ "a", "b", "c" ] (an array)
</code></pre><h3 id="como-enviar-e-mails-com-o-php"><strong>Como enviar e-mails com o PHP</strong></h3><p>Uma das coisas que eu gosto no PHP são as conveniências, como, por exemplo, para enviar um e-mail.</p><p>Envie um e-mail usando <a href="https://www.php.net/manual/en/function.mail.php"><code>mail()</code></a>:</p><pre><code class="language-php">mail('test@test.com', 'this subject', 'the body');
</code></pre><p>Para enviar e-mails em escala, não podemos usar essa solução, pois esses e-mails tendem a ir para a pasta de spam com mais frequência. Porém, para testes rápidos, isso é útil.</p><p>Bibliotecas como <a href="https://github.com/PHPMailer/PHPMailer">https://github.com/PHPMailer/PHPMailer</a> serão superúteis para necessidades mais robustas usando um servidor SMTP.</p><h2 id="como-usar-o-composer-e-o-packagist"><strong>Como usar o Composer e o Packagist</strong></h2><p><a href="https://getcomposer.org/">Composer</a> é o gerenciador de pacotes do PHP.</p><p>Ele permite que você instale facilmente pacotes em seus projetos.</p><p>Instale ele em sua máquina (<a href="https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos">Linux/Mac</a> ou <a href="https://getcomposer.org/doc/00-intro.md#installation-windows">Windows</a> - textos em inglês) e, assim que terminar, você deverá ter o comando <code>composer</code> disponível no terminal.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_16.25.43.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_16.25.43" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_16.25.43.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_16.25.43.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_16.25.43.jpg 1364w" sizes="(min-width: 1200px) 1200px" width="1364" height="848" loading="lazy"></figure><p>Agora, dentro do seu projeto, você pode rodar <code>composer require &lt;lib&gt;</code> e ele será instalado localmente. Por exemplo, vamos instalar <a href="https://carbon.nesbot.com/">a biblioteca Carbon</a>, que ajuda na manipulação de datas em PHP.</p><pre><code class="language-php">composer require nesbot/carbon
</code></pre><p>Ele vai fazer o download e a instalação do pacote:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_16.27.11.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_16.27.11" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_16.27.11.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_16.27.11.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_16.27.11.jpg 1504w" sizes="(min-width: 1200px) 1200px" width="1504" height="1154" loading="lazy"></figure><p>Feito isso, você encontrará algumas coisas novas na pasta <code>composer.json</code> que listará a nova configuração para as dependências do projeto:</p><pre><code class="language-php">{
    "require": {
        "nesbot/carbon": "^2.58"
    }
}
</code></pre><p><code>composer.lock</code> é usado para "bloquear" as versões do pacote, para que a instalação que você tenha possa ser replicada em outro servidor. A pasta <code>vendor</code> agora contém a biblioteca recém-instalada e suas dependências.</p><p>No arquivo <code>index.php</code>, podemos simplesmente adicionar este código no topo:</p><pre><code class="language-php">&lt;?php
require 'vendor/autoload.php';

use Carbon\Carbon;
</code></pre><p>Já podemos usar nossa biblioteca!</p><pre><code class="language-php">echo Carbon::now();
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_16.34.47.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_16.34.47" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_16.34.47.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_16.34.47.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_16.34.47.jpg 1148w" width="1148" height="448" loading="lazy"></figure><p>Viu? Não foi preciso baixar manualmente os pacotes da internet e instalá-los em algum lugar... foi tudo feito de forma simples, rápida e bem organizada.</p><p>A linha <code>require 'vendor/autoload.php';</code> é o que permite o <strong><strong>carregamento automático das dependências</strong></strong>. Você se lembra de quando falamos sobre <code>require_once()</code> e <code>include_once()</code>? Isso resolve todo aquele problema – não precisamos procurar manualmente o arquivo a ser incluído, basta apenas usarmos a palavra-chave <code>use</code> para importar a biblioteca para nosso código.</p><h2 id="como-fazer-o-deploy-implanta-o-de-um-aplicativo-php"><strong>Como fazer o deploy (implantação) de um aplicativo PHP</strong></h2><p>Depois que você tiver um aplicativo pronto para uso, chega finalmente a hora de fazer o deploy (implantação) dele e de torná-lo acessível para qualquer pessoa na Web.</p><p>Nesse quesito, PHP é a linguagem de programação com o melhor <em><em>históri</em>co</em> de deploy na web.</p><p>Confie em mim, todas as outras linguagens de programação e ecossistemas gostariam muito de ser tão fáceis quanto o PHP.</p><p>A maior coisa do PHP, em que ele acertou em cheio <em><em>e</em></em> permitiu que tivesse o sucesso incrível que teve, foi o deploy instantâneo.</p><p>Você coloca um arquivo PHP em uma pasta veiculada por um servidor web e era isso – simplesmente funciona.</p><p>Não há necessidade de reiniciar o servidor, iniciar um executável, nada.</p><p>Isso é algo que muitas pessoas ainda fazem nos dias de hoje. Você consegue uma hospedagem compartilhada por U$3/mês, carrega seus arquivos via FTP e pronto.</p><p>Hoje em dia, porém, acho que o deploy por Git é algo que deve ser incorporado a todos os projetos, independentemente do tamanho, e hospedagem compartilhada deve ser uma coisa do passado.</p><p>Uma solução é sempre ter seu próprio VPS (Virtual Private Server) privado, que você pode obter de serviços como DigitalOcean ou Linode. No entanto, gerenciar seu próprio VPS não é brincadeira. Requer conhecimento sério e investimento de tempo e manutenção constante.</p><p>Você também pode usar o chamado PaaS (Platform as a Service), que são plataformas que se encarregam de cuidar de todas as coisas chatas (gerenciar servidores) e você apenas carrega nela seu aplicativo e ela roda.</p><p>Soluções como <strong><strong>DigitalOcean App Platform</strong></strong> (que é diferente do VPS da DigitalOcean), Heroku e muitas outras são ótimas para seus primeiros testes.</p><p>Esses serviços permitem que você conecte sua conta do GitHub e faça o deploy sempre que enviar uma nova alteração para seu repositório <a href="https://flaviocopes.com/git/">Git</a>.</p><p>Você pode aprender <a href="https://flaviocopes.com/github-setup-from-zero/">como configurar o Git e o GitHub do zero aqui</a> (texto em inglês).</p><p>Esse é um fluxo de trabalho muito melhor em comparação com uploads de FTP.</p><p>Vamos fazer um exemplo básico.</p><p>Eu criei uma aplicação PHP simples com apenas o arquivo <code>index.php</code>:</p><pre><code class="language-php">&lt;?php
echo 'Hello!';
?&gt;
</code></pre><p>Adicionamos a pasta pai ao meu aplicativo GitHub Desktop, inicializo um repositório do Git e faço o push para o GitHub:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.26.24.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.26.24" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.26.24.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.26.24.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_17.26.24.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.26.24.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1612" loading="lazy"></figure><p>Agora, vá para <a href="http://digitalocean.com/">digitalocean.com</a>.</p><p>Se você ainda não tem uma conta, <a href="https://m.do.co/c/bd0657b4877c">use meu código de referência para se inscrever, e receber U$ 100 em créditos grátis nos próximos 60 dias</a> e você poderá trabalhar na sua aplicação PHP de forma gratuita.</p><p>Entramos na conta e vamos para <em>Apps → Create App</em>.</p><p>Conectamos à conta do GitHub e selecionamos o repositório da aplicação.</p><p>Quando for criar a aplicação, certifique-se de que a opção "Autodeploy" esteja marcada, para que ela seja reimplantada automaticamente quando fizer alterações nela:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.31.54.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.31.54" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.31.54.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.31.54.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_17.31.54.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.31.54.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1863" loading="lazy"></figure><p>Clique em <em>Next</em> (Avançar) e depois em <em>Edit Plan</em> (Editar plano):</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.32.24.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.32.24" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.32.24.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.32.24.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_17.32.24.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.32.24.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1863" loading="lazy"></figure><p>Por padrão, o plano Pro é selecionado.</p><p>Use o Basic e escolha o plano de U$5/mês.</p><p>Note que você paga U$5 por mês, mas o faturamento é por hora - para que você possa interromper a aplicação a qualquer momento.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.32.28.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.32.28" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.32.28.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.32.28.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_17.32.28.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.32.28.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1863" loading="lazy"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.33.15.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.33.15" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.33.15.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.33.15.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_17.33.15.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.33.15.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1863" loading="lazy"></figure><p>Em seguida, volte para a página de criação e pressione <em>Next</em> até que o botão <em>Create Resources</em> (Criar recursos) apareça para criar a aplicação. Você não vai precisar de nenhum banco de dados. Caso contrário, seriam mais U$ 7/mês em cima do valor anterior.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.33.46.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.33.46" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.33.46.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.33.46.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_17.33.46.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.33.46.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1863" loading="lazy"></figure><p>Agora espere até que a implantação esteja pronta:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.35.00.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.35.00" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.35.00.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.35.00.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screen_Shot_2022-06-27_at_17.35.00.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.35.00.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1418" loading="lazy"></figure><p>A aplicação já está funcionando!</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.35.31.jpg" class="kg-image" alt="Screen_Shot_2022-06-27_at_17.35.31" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screen_Shot_2022-06-27_at_17.35.31.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screen_Shot_2022-06-27_at_17.35.31.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screen_Shot_2022-06-27_at_17.35.31.jpg 1258w" sizes="(min-width: 1200px) 1200px" width="1258" height="886" loading="lazy"></figure><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Você chegou ao final do Manual do PHP! Parabéns!</p><p>Obrigado por ler esta introdução ao maravilhoso mundo do desenvolvimento em PHP. Espero que esse conhecimento o ajude a conseguir trabalho na área de desenvolvimento web, se tornar melhor nela ou capacitar você a trabalhar na próxima grande ideia de sua vida.</p><p>Observação: Você também pode ter uma versão desse manual, em inglês, em <a href="https://thevalleyofcode.com/download/php/">PDF, ePub ou Mobi</a>, para uma fácil referência ou para ler no seu Kindle ou tablet.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Os melhores exemplos do PHP ]]>
                </title>
                <description>
                    <![CDATA[ O PHP é uma linguagem de script para back-end (em que o código que é executado pelo servidor, e não pelo dispositivo do usuário) criada em 1995 por Rasmus Lerdorf. O PHP é uma linguagem de script de uso geral, com código aberto, e é amplamente utilizada no mercado, sendo ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/os-melhores-exemplos-do-php/</link>
                <guid isPermaLink="false">62e183defea2f10707d6796d</guid>
                
                    <category>
                        <![CDATA[ PHP ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Sun, 31 Jul 2022 01:18:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/php-examples-1-.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-best-php-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Best PHP Examples</a>
      </p><p>O PHP é uma linguagem de script para back-end (em que o código que é executado pelo servidor, e não pelo dispositivo do usuário) criada em 1995 por Rasmus Lerdorf.</p><p>O PHP é uma linguagem de script de uso geral, com código aberto, e é amplamente utilizada no mercado, sendo mais apropriada para o desenvolvimento para a web, podendo ser incorporada ao HTML.</p><p>Uma linguagem de programação de script (ou scripting) é uma linguagem em que uma rotina (script) ou programa é executado em tempo de execução, ou seja, não precisa ser transformado em código de máquina (compilada) para só depois ser executado.</p><h3 id="para-que-serve-o-php"><strong>Para que serve o PHP?</strong></h3><p>Em outubro de 2018, ele era usado em <a href="https://w3techs.com/technologies/overview/programming_language/all">80% dos sites cuja linguagem do lado do servidor é conhecida</a> (em inglês). Normalmente, ele é usado em sites para gerar de forma dinâmica o conteúdo da página, podendo ser usado em:</p><ul><li>Sites e aplicativos da web (o código do back-end)</li><li>Script de linha de comando</li><li>Aplicativos de área de trabalho (GUI)</li></ul><p>Em geral, ele é usado principalmente para gerar de modo dinâmico o conteúdo das páginas. Por exemplo, se você tiver um blog, podes escrever algum script em PHP para recuperar suas publicações a partir de um banco de dados e exibi-las no seu blog. Outras maneiras de usar scripts PHP incluem:</p><ul><li>Processar e salvar os dados inseridos pelos usuários em um formulário</li><li>Configurar e manipular os cookies do site</li><li>Restringir o acesso a determinadas páginas do seu site</li></ul><p>A maior plataforma de rede social, o <a href="https://www.facebook.com/">Facebook</a>, foi inicialmente escrita usando PHP.</p><h3 id="como-funciona-o-php"><strong>Como funciona o PHP?</strong></h3><p>Todo o código em PHP é executado apenas no servidor, e não no dispositivo local do usuário. Por exemplo, se você preencher um formulário em um site e enviá-lo, ou se clicar em um link de uma página escrita em PHP, nenhum código PHP será executado no seu computador. Em vez disso, os dados do formulário ou a requisição da página serão enviados a um servidor para serem processados ​​pelos scripts em PHP. Depois de processados, o servidor enviará o HTML resultante para você (que é de onde vem o termo "Hypertext Preprocessor" - ou pré-processador de hipertexto) e o navegador o exibe na tela. Por essa razão, você não consegue ver o código PHP de um site, apenas o HTML resultante produzido pelos scripts em PHP do site.</p><p>Ilustrarei isso abaixo:</p><p>O PHP é uma linguagem interpretada. Isso quer dizer que, quando você faz alterações no código-fonte, pode testar imediatamente essas alterações, sem precisar compilar (transformar) o código-fonte em formato binário. Ignorar a etapa de compilação torna o processo de desenvolvimento muito mais rápido.</p><p>O código em PHP precisa sempre ser colocado entre as tags <code>&lt;?php</code> e <code>?&gt;</code> e também pode ser incorporado dentro de um código HTML.</p><h2 id="instala-o"><strong>Instalação</strong></h2><p>O PHP pode ser instalado com ou sem um servidor web.</p><h3 id="gnu-linux"><strong>GNU/Linux</strong></h3><p>Em distribuições GNU/Linux baseadas em Debian, você pode instalá-lo pelo terminal com o comando:</p><pre><code class="language-bash">sudo apt install php</code></pre><p>No Centos 6 ou 7, você pode instalar com o comando:</p><pre><code class="language-bash">sudo yum install php</code></pre><p>Depois de instalado, você pode executar qualquer arquivo em PHP simplesmente escrevendo no terminal:</p><pre><code class="language-text">php nome_do_arquivo.php</code></pre><p>Ou, se preferir, pode instalar um servidor da web para poder executar seus sites em PHP no seu próprio computador (http://localhost).</p><p>Só para esclarecer, o domínio http://localhost é um domínio padrão do sistema , e quando fazemos uma requisição para ele. Ele, então, direciona essa requisição para o IP do próprio computador (por padrão aponta o endereço 127.0.0.1), agora não mais enviando, mas recebendo uma requisição de recurso.</p><p>O que um servidor localhost faz é gerenciar as rotas de endereços e executar o seu site no domínio que você quiser (podendo ser diferente do domínio http://localhost também).</p><p>O servidor mais usado no mundo é o Apache. Para instalá-lo em distribuições Linux, digite o seguinte comando no seu terminal:</p><pre><code class="language-text">sudo apt install apache2 libapache2-mod-php</code></pre><p>Ou, se preferir, pode instalar o PHP, o MySQL e o servidor web, instalando o <a href="https://www.apachefriends.org/download.html">XAMPP</a> (é um pacote de soluções para servidor web multiplataforma, gratuito e de código aberto) ou pacotes semelhantes como <a href="http://www.wampserver.com/en/">WAMP</a> e <a href="https://www.mamp.info/en/downloads/">MAMP</a>.</p><h2 id="frameworks-do-php"><strong>Frameworks do PHP</strong></h2><p>Como escrever todo o código de um site não é algo prático/viável para a maioria dos projetos, a maioria dos desenvolvedores tende a usar frameworks para o desenvolvimento para a web. As vantagens de se usar um framework são:</p><ul><li>Você não precisa reinventar a roda toda vez que cria um projeto, muitas nuances já estão prontas para você</li><li>Geralmente, eles são bem estruturados para ajudar você na separação das responsabilidades</li><li>A maioria dos frameworks tende a seguir as melhores práticas da linguagem</li><li>Muitos deles seguem o padrão MVC (Model-View-Controller) para separar as camadas de apresentação da lógica</li></ul><h3 id="frameworks-populares-de-php"><strong>Frameworks populares de PHP</strong></h3><ul><li><a href="https://codeigniter.com/">CodeIgniter</a></li><li><a href="https://laravel.com/">Laravel</a></li><li><a href="https://symfony.com/">Symfony</a></li><li><a href="http://www.zend.com/">Zend</a></li><li><a href="https://cakephp.org/">CakePHP</a></li><li><a href="https://fuelphp.com/">FuelPHP</a></li><li><a href="https://www.slimframework.com/">Slim</a></li><li><a href="https://www.yiiframework.com/">Yii 2</a></li></ul><h2 id="sintaxe-b-sica"><strong>Sintaxe básica</strong></h2><p>Os scripts de PHP podem ser colocados em qualquer lugar dentro de um documento, e sempre começam com a tag <code>&lt;?php</code> e terminam com a tag <code>?&gt;</code>. Além disso, cada instrução PHP deve terminar com um ponto e vírgula <code>;</code>.</p><p>Aqui está um script simples que usa a função nativa <code>echo</code> para enviar o texto "Os melhores exemplos de PHP" para a página:</p><pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;body&gt;

&lt;h1&gt;Notícias do desenvolvedor&lt;/h1&gt;

&lt;?php echo "Os melhores exemplos de PHP"; ?&gt;

&lt;/body&gt;
&lt;/html&gt; </code></pre><p>A saída disso seria:</p><pre><code class="language-text">Notícias do desenvolvedor

Os melhores exemplos de PHP</code></pre><h3 id="coment-rios"><strong>Comentários</strong></h3><p>O PHP suporta as seguintes maneiras de se comentar o código:</p><ul><li>Comentários de linha única, ou <em>single-line</em>:</li><li>Comentários de várias linhas, ou <em>multi-line</em>:</li></ul><pre><code>&lt;?php
  // Este é um comentário de uma linha
  # Você também pode fazer comentários de uma linha assim
?&gt;</code></pre><pre><code>&lt;?php
/*
Este bloco de comentários
se estende por
várias linhas
*/
?&gt;</code></pre><h3 id="sensibilidade-a-mai-sculas-e-min-sculas"><strong>Sensibilidade a maiúsculas e minúsculas</strong></h3><p>Todas as palavras-chave (keywords), classes e funções NÃO diferenciam maiúsculas de minúsculas.</p><p>No exemplo abaixo, todas as três declarações de <code>echo</code> são válidas:</p><pre><code class="language-text">&lt;?php
ECHO "Olá!&lt;br&gt;";
echo "Notícias do desenvolvedor&lt;br&gt;";
EcHo "Aproveite todos os artigos&lt;br&gt;";
?&gt;</code></pre><p>No entanto, todos os nomes de variáveis ​​diferenciam maiúsculas de minúsculas. No exemplo abaixo, apenas a primeira instrução é válida e exibirá o valor da variável <code>$name</code>, as variáveis <code>$NAME</code> e <code>$NaMe</code> serão tratadas como variáveis ​​diferentes:</p><pre><code class="language-text">&lt;?php
$name = "Quincy";

echo "Olá! Meu nome é " . $name . "&lt;br&gt;";
//Olá! Meu nome é Quincy!

echo "Olá! Meu nome é " . $NAME . "&lt;br&gt;";
//Erro de sintaxe: sintaxe inválida

echo "Olá! Meu nome é " . $NaMe . "&lt;br&gt;";
//Erro de sintaxe: sintaxe inválida
?&gt;</code></pre><h2 id="vari-veis"><strong>Variáveis</strong></h2><p>Variáveis ​​são a principal maneira de se armazenar informações em um programa em PHP.</p><p>Todas as variáveis ​​no PHP começam com um cifrão, como em <code>$nome_da_variavel</code>. Para atribuir uma variável, use o operador <code>=</code>, com o nome da variável à esquerda e a expressão a ser avaliada à direita.</p><p><strong><strong><strong><strong>Sintaxe:</strong></strong></strong></strong></p><pre><code class="language-php">&lt;?php
// Atribui o valor "Olá!" para a variável "saudacao"
$saudacao = "Olá!";
// Atribui o valor 8 para a variável "mes"
$mes = 8;
// Atribui o valor 2019 para a variável "ano"
$ano = 2019;
?&gt;</code></pre><h3 id="regras-para-vari-veis-em-php"><strong>Regras para variáveis em ​​PHP</strong></h3><ul><li>Declarações de variáveis ​​começam com <code>$</code>, seguido pelo nome da variável</li><li>Os nomes de variáveis ​​só podem começar com uma letra maiúscula ou minúscula ou um sublinhado ( <code>_</code>)</li><li>Os nomes de variáveis ​​podem conter apenas letras, números ou sublinhado (Az, 0-9 e <code>_</code>). Outros caracteres especiais, como <code>+ - % ( ) . &amp;</code>, são inválidos</li><li>Os nomes das variáveis ​​diferenciam maiúsculas de minúsculas</li></ul><p><strong><strong>Alguns exemplos de nomes de variáveis ​​permitidos:</strong></strong></p><ul><li>$minha_variavel</li><li>$outraVariavel</li><li>$variavelNro2</li></ul><h3 id="vari-veis-predefinidas"><strong>Variáveis ​​predefinidas</strong></h3><p>O PHP tem várias palavras-chave especiais que, embora sejam nomes de variáveis ​​"válidas", não podem ser usadas para suas variáveis. A razão disso é que a própria linguagem já definiu essas variáveis ​​e elas são usadas para propósitos especiais. Vários exemplos estão listados abaixo, mas se quiser ver a lista completa, essa é a <a href="https://secure.php.net/manual/en/language.variables.predefined.php"></a><a href="https://www.php.net/manual/pt_BR/language.variables.predefined.php">documentação do PHP</a>.</p><ul><li><code>$this</code></li><li><code>$_GET</code></li><li><code>$_POST</code></li><li><code>$_SERVER</code></li><li><code>$_FILES</code></li></ul><h2 id="tipos-de-dados-em-php"><strong>Tipos de dados em PHP</strong></h2><p>As variáveis ​​podem armazenar dados de diferentes tipos, como:</p><ul><li>String ("Olá")</li><li>Inteiro (5)</li><li>Float (também chamado de double) (1.0)</li><li>Booleano (1 ou 0)</li><li>Array (array("Eu", "sou", "um", "array"))</li><li>Objeto</li><li>NULL</li><li>Recurso</li></ul><h3 id="strings"><strong>Strings</strong></h3><p>Uma string é uma sequência de caracteres. Ela pode ser qualquer texto entre aspas (simples ou duplas):</p><pre><code class="language-php">$x = "Olá!";
$y = 'Olá!';</code></pre><h3 id="inteiros"><strong>Inteiros</strong></h3><p>Um tipo de dados inteiro é um número não decimal entre -2.147.483.648 e 2.147.483.647.</p><p><strong><strong>Regras para números inteiros:</strong></strong></p><ul><li>Os números inteiros devem ter pelo menos um dígito</li><li>Os inteiros não devem ter o ponto decimal</li><li>Os inteiros podem ser positivos ou negativos até o número 2.147.483.647</li></ul><p><code>$x = 5;</code></p><h3 id="flutuantes-float-"><strong>Flutuantes (float)</strong></h3><p>Um número flutuante, ou de ponto flutuante, é um número com um ponto decimal, ou um número na forma exponencial(por exemplo, 5.046E-7), podendo ter, uma precisão de até 14 dígitos, dependendo do sistema.</p><p><code>$x = 5.01;</code></p><h3 id="booleanos"><strong>Booleanos</strong></h3><p>Um booleano representa dois estados possíveis: TRUE (Verdadeiro) ou FALSE (Falso). Booleanos são frequentemente usados ​​em testes condicionais.</p><pre><code class="language-php">$x = true;
$y = false;</code></pre><h3 id="arrays"><strong>Arrays</strong></h3><p>Um array armazena mais de um valor em uma única variável.</p><p><code>$cores = array("Magenta", "Amarelo", "Ciano");</code></p><h3 id="null"><strong>NULL</strong></h3><p>Null é um tipo de dado especial que só pode ter o valor <code>null</code>. As variáveis ​​podem ser declaradas sem valor ou esvaziadas definindo o seu valor como <code>null</code>. Além disso, se uma variável for criada sem receber um valor, ela é atribuída com o valor <code>null</code> automaticamente.</p><pre><code class="language-php">&lt;?php
// Atribui o valor "Olá!" à variável saudacao
$saudacao = "Olá!";

// Esvazie o valor de saudacao definindo-a como null
$saudacao = null;
?&gt;</code></pre><h3 id="classes-e-objetos"><strong>Classes e objetos</strong></h3><p>Uma classe é uma estrutura de dados útil para modelar coisas do mundo real, podendo conter propriedades e métodos. Os objetos são instâncias de uma classe e são uma maneira prática de agrupar valores e funções específicas de uma classe.</p><pre><code class="language-php">&lt;?php
class Car {
    function Car() {
        $this-&gt;model = "Tesla";
    }
}

// Cria um objeto
$Lightning = new Car();

// Mostra as propriedades do objeto
echo $Lightning-&gt;model;
?&gt;</code></pre><h3 id="recurso-em-php"><strong>Recurso em PHP</strong></h3><p>Um recurso, ou, como é mais conhecido, <em>resource</em>, é uma variável especial, mantendo uma referência a um recurso externo. Os <em>resources</em> são criados e usados ​​por funções especiais. Um exemplo é a função <a href="http://php.net/manual/en/function.get-resource-type.php">get<em><em>resource</em></em>type()</a>, que você pode usar para ver o tipo de recurso que uma variável oferece.</p><pre><code class="language-php">&lt;?php
// exibe: mysql link
$c = mysql_connect();
echo get_resource_type($c) . "\n";

// exibe: stream
$fp = fopen("foo", "w");
echo get_resource_type($fp) . "\n";

// exibe: domxml document
$doc = new_xmldoc("1.0");
echo get_resource_type($doc-&gt;doc) . "\n";</code></pre><h2 id="strings-1"><strong><strong>Strings</strong></strong></h2><p>Uma string é uma série de caracteres. Elas podem ser usadas ​​para armazenar qualquer informação textual em seu aplicativo.</p><p>Existem diversas maneiras diferentes de se criar strings em PHP.</p><h3 id="aspas-simples"><strong>Aspas simples</strong></h3><p>Strings simples podem ser criadas usando aspas simples.</p><pre><code class="language-php">$nome = 'Joe';</code></pre><p>Para incluir aspas simples dentro de uma string de aspas simples, use a barra invertida como escape (que altera o significado do próximo caractere).</p><pre><code class="language-php">$sobrenome = 'O\'Brian';</code></pre><h3 id="aspas-duplas"><strong>Aspas duplas</strong></h3><p>Você também pode criar strings usando aspas duplas.</p><pre><code class="language-php">$name = "Joe";</code></pre><p>Para incluir aspas duplas dentro de uma string de aspas duplas, use a barra invertida também.</p><pre><code class="language-php">$citacao = "Mary disse: \"Eu quero algumas torradas\" e depois fugiu.";</code></pre><p>Strings com aspas duplas também permitem sequências de escape. Esses são códigos especiais que colocam caracteres em sua string e representam caracteres normalmente invisíveis. Os exemplos mais comuns são novas linhas <code>\n</code>, tabulações <code>\t</code> e a barra invertida <code>\\</code>.</p><p>Você também pode incorporar variáveis em ​​PHP em strings com aspas duplas para que seus valores sejam adicionados à string normalmente.</p><pre><code class="language-php">$nome = 'Joe';
$saudacao = "Olá $nome"; // agora contém a string "Olá Joe"</code></pre><h3 id="fun-es-de-string">Funções de String</h3><h4 id="encontrar-o-tamanho-de-uma-string">Encontrar o tamanho de uma string</h4><p>A função <code>strlen()</code> retorna o tamanho de uma string.</p><pre><code class="language-text">&lt;?php
echo strlen("Notícias do desenvolvedor"); // exibe: 29
?&gt;</code></pre><h4 id="encontrar-o-n-mero-de-palavras-em-uma-string">Encontrar o número de palavras em uma string</h4><p>A função <code>str<em><em>word</em></em>count()</code> retorna o número de palavras em uma string:</p><pre><code class="language-text">&lt;?php
echo str_word_count("Notícias do desenvolvedor"); // exibe: 3
?&gt;</code></pre><h4 id="inverter-uma-string">Inverter uma string</h4><p>A função <code>strrev()</code> inverte uma string:</p><pre><code class="language-text">&lt;?php
echo strrev("Notícias do desenvolvedor");
// exibe: rodevlovnesed od saicítoN
?&gt;</code></pre><h4 id="pesquisar-um-texto-em-uma-string"><strong>Pesquisar um texto em uma string</strong></h4><p>A função <code>strpos()</code> procura um texto em string e retorna a posição em que ele aparece:</p><pre><code class="language-text">&lt;?php
echo strpos("Notícias do desenvolvedor", "desenvolvedor"); // exibe: 12
?&gt;</code></pre><h4 id="substituir-texto-dentro-de-uma-string"><strong>Substituir texto dentro de uma string</strong></h4><p>A função <code>str_replace()</code> substitui o texto em uma string:</p><pre><code class="language-text">&lt;?php
str_replace("freeCodeCamp", "desenvolvedor", "Notícias do freeCodeCamp");
// exibe: Notícias do desenvolvedor
?&gt;</code></pre><h2 id="constantes"><strong>Constantes</strong></h2><p>Constantes são um tipo de variável em PHP. A função <code>define()</code> é usada para definir uma constante, e recebe três argumentos - o nome da chave, o valor da chave e um booleano (verdadeiro ou falso) que determina se o nome da chave não diferencia maiúsculas de minúsculas (falso por padrão). O valor de uma constante não pode ser alterado depois que é definido. É usado para valores que raramente mudam (por exemplo, uma senha de banco de dados OU chave de API).</p><h3 id="escopo"><strong>Escopo</strong></h3><p>É importante você saber também que, diferente das variáveis, as constantes SEMPRE possuem o escopo global, e podem ser acessadas de qualquer função no script.</p><pre><code class="language-php">&lt;?php
  define("freeCodeCamp", "Aprenda a programar e ajude organizações sem fins lucrativos", false);
  echo freeCodeCamp;
&gt;?

// exibe: Aprenda a programar e ajudar organizações sem fins lucrativos</code></pre><p>Além disso, quando você está criando classes, você pode declarar suas próprias constantes.</p><pre><code class="language-php">lass Humano {
  const TYPE_MACHO = 'm';
  const TYPE_FEMEA = 'f';
  const TYPE_UNKNOWN = 'u'; // Quando o usuário não selecionar o gênero
}</code></pre><p><strong><strong><strong><strong>Observação:</strong></strong></strong></strong> se você quiser usar essas constantes dentro da classe <code>Humano</code>, você pode referenciá-las como <code>self::NOME_DA_CONSTANTE</code>. Se você quiser usá-las fora da classe, você precisa referenciar elas como <code>HumanO::NOME_DA_CONSTANTE</code>.</p><h2 id="operadores"><strong>Operadores</strong></h2><p>O PHP contém todos os operadores normais que se espera encontrar em uma linguagem de programação.</p><p>Um único "=" é usado como operador de atribuição e um duplo "==" ou o triplo "===" é usado para comparação.</p><p>Os usuais "&lt;" e "&gt;" também podem ser usados ​​para comparação e "+=" pode ser usado para somar um valor à variável e atribuir o resultado à si mesma ao mesmo tempo.</p><p>O mais notável é o uso do "." para concatenar strings e ".=" para adicionar uma string ao final de outra.</p><p>Uma novidade do PHP 7.0.X é o operador Spaceship "&lt;=&gt;". Esse operador retorna -1, 0 ou 1 quando $a é menor, igual ou maior que $b.</p><pre><code class="language-php">&lt;?php

echo 1 &lt;=&gt; 1; // 0
echo 1 &lt;=&gt; 2; // -1
echo 2 &lt;=&gt; 1; // 1</code></pre><h2 id="instru-es-if-else-elseif"><strong>Instruções if/else/elseif</strong></h2><p>If/else (se/senão) é uma instrução condicional onde, dependendo de uma condição ser verdadeira ou não, diferentes ações serão executadas.</p><p><strong><strong><strong><strong>Observação:</strong></strong></strong></strong> os colchetes <code>{}</code> são necessários apenas se a condição tiver mais de uma ação; no entanto, é uma boa prática incluí-los, independentemente da quantidade de ações.</p><h3 id="instru-o-if"><strong>Instrução if</strong></h3><pre><code class="language-text">&lt;?php
  if (condicao1) {
    instrucao1;
    if (condicao2) instrucao2;
  }</code></pre><p><strong><strong><strong><strong>Observação:</strong></strong></strong></strong> é possível aninhar quantas instruções em um bloco "if" você quiser; você não está limitado à quantidade dos exemplos.</p><h3 id="instru-o-if-else">Instrução <strong>if/else</strong></h3><pre><code class="language-text">&lt;?php

  if (condicao) {
    instrucao1;
    instrucao2;
  } else {
    instrucao3;
    instrucao4;
  }</code></pre><p><strong><strong>Observação<strong><strong>:</strong></strong></strong></strong> a instrução <code>else</code> é opcional.</p><h3 id="instru-o-if-elseif-else">Instru<strong>ção if/elseif/else</strong></h3><pre><code class="language-text">&lt;?php
  if (condicao1) {
    instrucao1;
    instrucao2;
  } elseif (condicao2) {
    instrucao3;
    instrucao4;
  } else {
    instrucao5;
  }</code></pre><p><strong><strong><strong><strong>Observação:</strong></strong></strong></strong> <code>elseif</code> deve ser escrito sempre como uma palavra só.</p><h3 id="instru-es-if-else-aninhadas"><strong>Instruções if/else aninhadas</strong></h3><pre><code class="language-text">&lt;?php
  if (condicao1) {
    if (condicao2) {
      instrucao1;
      instrucao2;
    } else {
      instrucao3;
      instrucao4;
    }
  } else {
    if (condicao3) {
      instrucao5;
      instrucao6;
    } else {
      instrucao7;
      instrucao8;
    }
  }</code></pre><h3 id="m-ltiplas-condi-es"><strong>Múltiplas condições</strong></h3><p>Várias condições podem ser usadas de uma só vez com os operadores lógicos "ou" (||), "xor" e "e" (&amp;&amp;).</p><p>Por exemplo:</p><pre><code class="language-text">&lt;?php
  if (condicao1 &amp;&amp; condicao2) {
    echo 'Ambas as condições são verdadeiras!';
  } elseif (condicao1 || condicao2) {
    echo 'Uma condição é verdadeira!';
  } else (condicao1 xor condicao2) {
    echo 'Uma condição é verdadeira e outra é falsa!';
  }</code></pre><p><strong><strong><strong><strong>Observação:</strong></strong></strong></strong> é uma boa prática envolver condições individuais entre parênteses quando você tiver mais de um (pois pode melhorar a legibilidade).</p><h3 id="sintaxe-alternativa-de-if-else"><strong>Sintaxe alternativa de if/else</strong></h3><p>Há também uma sintaxe alternativa para estruturas de controle:</p><pre><code class="language-php">if (condicao1):
  instrucao1;
else:
  instrucao2;
endif;</code></pre><h3 id="operador-tern-rio"><strong>Operador ternário</strong></h3><p>Outra opção é o operador ternário, que é basicamente uma instrução if/else de uma única linha.</p><p>Vamos supor que você precise exibir "Olá (nome do usuário)" se um usuário estiver logado e "Olá visitante" se ele não estiver logado.</p><p><strong><strong>Instrução </strong>i<strong>f/</strong>e<strong>lse</strong></strong>:</p><pre><code class="language-text">if($usuario == !NULL {
  $mensagem = 'Olá '. $usuario;
} else {
  $mensagem = 'Olá visitante';
}</code></pre><p><strong><strong>Operador ternário</strong></strong>:</p><pre><code class="language-text">$mensagem = 'Olá '.($usuario == !NULL ? $usuario : 'Guest');</code></pre><h2 id="switch"><strong>Switch</strong></h2><p>Em PHP, a instrução <code>Switch</code> é muito semelhante à instrução <code>Switch</code> do JavaScript (consulte essa <a href="https://www.freecodecamp.org/news/introduction-to-javascript-switch-cases/">Introdução ao Switch em JavaScript</a> para comparar as duas - texto em inglês). Ele permite testes rápidos de caso com muitas condições diferentes possíveis, de forma mais legível.</p><pre><code class="language-php">&lt;?php
  // Exemplo da instrução switch
  switch ($i) {
    case "free":
      echo "i é free";
      break;
    case "code":
      echo "i é code";
      break;
    case "camp":
      echo "i é camp";
      break;
    default:
      echo "i é freecodecamp";
      break;
  }</code></pre><h3 id="break"><strong><strong>Break</strong></strong></h3><p>A instrução <code>break;</code> sai do switch e continua a execução do código depois dele. Se você não usar a instrução <code>break;</code>, poderá acabar executando vários casos e instruções, sendo que, somente quando isso for desejado, você deve não incluir a instrução <code>break;</code>.</p><p>Um exemplo desse comportamento pode ser visto abaixo:</p><pre><code class="language-text">&lt;?php
  $j = 0;
  switch ($i) {
    case '2':
      $j++;
    case '1':
      $j++;
      break;
    default:
      break;
  }</code></pre><p>Se $i = 1, o valor de $j seria:</p><pre><code class="language-text">1</code></pre><p>Se $i = 2, o valor de $j seria:</p><pre><code class="language-text">2</code></pre><p>Embora a quebra possa ser omitida sem causar falhas, em alguns casos (como o exemplo abaixo), geralmente é uma boa prática inclui-la para se ter legibilidade e segurança:</p><pre><code class="language-text">&lt;?php
  switch ($i) {
    case '1':
      return 1;
    case '2':
      return 2;
    default:
      break;
  }</code></pre><pre><code class="language-text">&lt;?php
  switch ($i) {
    case '1':
      return 1;
      break;
    case '2':
       return 2;
       break;
    default:
       break;
  }</code></pre><h3 id="exemplo-"><strong>Exemplo</strong>‌</h3><pre><code class="language-php">&lt;?php
  // inicializa com um inteiro aleatório dentro do intervalo dos números do dado
  $numeroDado = mt_rand(1, 6);
  // inicializa
  $numeroTexto = "";
  // chama a instrução switch
  switch($numeroDado) {
    case 1:
      $numeroTexto = "Um";
      break;
    case 2:
      $numeroTexto = "Dois";
      break;
    case 3:
    case 4:
      // os casos 3 e 4 vão para esta linha
      $numeroTexto = "Três ou Quatro";
      break;
    case 5:
      $numeroTexto = "Cinco";
      echo $numeroTexto;
      // break;
      //sem especificar o break ou return, ele continuará executando o próximo case.
  
    case 6:
      $numeroTexto = "Seis";
      echo $numeroTexto;
      break;
    default:
      $numeroTexto = "desconhecido";
  }
//exibe o resultado
echo 'O dado caiu no número '.$numeroTexto.'.';

?&gt;</code></pre><h3 id="resultado"><strong>Resultado</strong></h3><pre><code class="language-text">Se case for 1
&gt; O dado caiu no número Um.
Se case for 2
&gt; O dado caiu no número Dois.
Se case for 3
&gt; O dado caiu no número Três ou Quatro.
Se case for 4
&gt; O dado caiu no número Três ou Quatro
Se case for 5
&gt; CincoSeisO dado caiu no número Seis
Se case for 6
&gt; SeisO dado caiu no número Seis.
Se não for nenhuma das anteriores
&gt; O dado caiu no número desconhecido.</code></pre><h2 id="la-os"><strong><strong>L</strong>aço<strong>s</strong></strong></h2><p>Quando você precisa repetir uma tarefa várias vezes, pode usar um laço (ou <em>loop</em>) em vez de adicionar o mesmo código várias vezes.</p><p>Usar um <code>break</code> dentro do laço permite que você interrompa a execução.</p><h3 id="la-o-for"><strong>Laço f<strong>or</strong></strong></h3><p>Para fazer um laço em um bloco de código um número específico de vezes, utilize o laço <code>for</code>.</p><pre><code class="language-php">&lt;?php
  for($indice = 0; $indice &lt; 5; $indice++) {
    echo "Contador do laço atual em ".$indice.".\n";
  }
?&gt;
/* Exibirá:
Contador do laço atual em 0.
Contador do laço atual em 1.
Contador do laço atual em 2.
Contador do laço atual em 3.
Contador do laço atual em 4.
*/</code></pre><h3 id="la-o-while"><strong>Laço w<strong>hile</strong></strong></h3><p>A instrução <code>while</code> executa um laço em um bloco de código enquanto uma condição for verdadeira.</p><pre><code class="language-php">&lt;?php
  $indice = 5;
  while ($indice &gt;= 0) {
    echo "O índice é ".$indice.".\n";
    $indice--;
  }
?&gt;
/*
Exibirá:
O índice é 5.
O índice é 4.
O índice é 3.
O índice é 2.
O índice é 1.
O índice é 0.
*/</code></pre><h3 id="la-o-do-while"><strong>Laço d<strong>o...</strong>w<strong>hile</strong></strong></h3><p>Com essa instrução, você consegue fazer um laço em um bloco de código uma vez e só repeti-lo se a condição for verdadeira.</p><pre><code class="language-php">&lt;?php
  $indice = 3;
  do {
    // executa isso pelo menos 1 vez
    echo "Índice: ".$indice.".\n";
    $index --;
  } while ($indice &gt; 0)
?&gt;
/* Exibirá:
Índice: 3.
Índice: 2.
Índice: 1.
*/</code></pre><h3 id="la-o-foreach"><strong>Laço f<strong>oreach</strong></strong></h3><p>O laço <code>foreach</code> repete o bloco de código para cada valor de um array, atribuindo esse valor a uma variável criada internamente e redefinida a cada repetição.</p><pre><code class="language-php">&lt;?php
  $arr = array(1, 2, 3, 4);
  foreach ($arr as &amp;$indice) {
    echo "Índice: ".$indice.".\n";
  }
?&gt;
/*
Exibirá:
Índice: 1.
Índice: 2.
Índice: 3.
Índice: 4.
*/</code></pre><h2 id="fun-es"><strong>Funções</strong></h2><p>Uma função é um bloco de instruções que pode ser executado sempre que for chamado em um programa.</p><h3 id="fun-o-simples-chamada"><strong>Função simples + chamada</strong></h3><pre><code class="language-php">function diga_ola() {
  return "Olá!";
}

echo diga_ola()</code></pre><h3 id="fun-o-simples-par-metro-chamada-"><strong>Função simples + parâmetro + chamada</strong>‌ </h3><pre><code class="language-php">function diga_ola($amigo) {
  return "Olá " . $amigo . "!";
}

echo diga_ola('Tommy');</code></pre><h3 id="fun-o-strtoupper-"><strong>Função strtoupper()</strong></h3><p>A função <code>strtoupper</code> retorna a string que foi enviada para ela como parâmetro na sua versão em MAIÚSCULAS!</p><pre><code class="language-php">function fazerIssoGRANDE($um_monte_de_nomes) { 
  foreach($um_monte_de_nomes as $os_simpsons) {
    $GRANDE[] = strtoupper($os_simpsons);
  }
  return $GRANDE;
}
$lista_com_nomes = ['Homer', 'Marge', 'Bart', 'Maggy', 'Lisa'];
var_dump(fazerIssoGRANDE($lista_com_nomes));</code></pre><h2 id="arrays-1"><strong><strong>Arrays</strong></strong></h2><p>Arrays são como variáveis ​normais, só que contêm vários valores em uma lista ordenada. Isso é útil se você tiver vários valores relacionados entre si, como uma lista de nomes de alunos ou uma lista de capitais.</p><h3 id="tipos-de-arrays"><strong>Tipos de arrays</strong></h3><p>No PHP, existem dois tipos de arrays: arrays indexados e arrays associativos. Cada um deles tem seu próprio uso e veremos aqui como criar esses arrays.</p><h3 id="array-indexado"><strong>Array indexado</strong></h3><p>Um array indexado é uma lista de valores ordenados. Cada um desses valores no array recebe um número de índice. Os índices em arrays sempre começam no <code>0</code> para o primeiro valor e depois crescem de um em um a partir daí.</p><pre><code class="language-php">&lt;?php
  $lista_de_mercado = array("ovos", "leite", "queijo");
?&gt;</code></pre><p><code>$lista_de_mercado[0]</code> retornaria <code>"ovos"</code>, <code>$lista_de_mercado[1]</code> retornaria <code>"leite"</code>, e <code>$lista_de_mercado[2]</code> retornaria <code>"queijo"</code>.</p><h3 id="array-associativo"><strong><strong>Array</strong> a<strong>ssociati</strong>vo</strong></h3><p>Um array associativo é uma lista de valores que são acessados ​​por meio de uma chave ao invés de índices numéricos. Uma chave pode ter qualquer valor e ser de qualquer tipo, contanto que seu nome seja único no array.</p><pre><code class="language-php">&lt;?php
  $pontuacao_dos_estudantes = array("Joe" =&gt; 83, "Frank" =&gt; "93", "Benji" =&gt; "90");
?&gt;</code></pre><p><code>$pontuacao_dos_estudantes['Joe']</code> retornaria <code>83</code>, <code>$pontuacao_dos_estudantes['Frank']</code> retornaria <code>93</code>, <code>$pontuacao_dos_estudantes['Benji']</code> retornaria <code>90</code>.</p><h3 id="array-multidimensional"><strong>Array m<strong>ultidimensional</strong></strong></h3><p>Um array multidimensional é um array que contém outros arrays. Isso permite criar estruturas de dados complexas que podem modelar um grupo de dados muito complexo.</p><pre><code class="language-php">&lt;?php
  $estudantes =
    array(
      array("primeiro_nome" =&gt; "Joe", "pontuacao" =&gt; 83, "ultimo_nome" =&gt; "Smith"),
      array("primeiro_nome" =&gt; "Frank", "pontuacao" =&gt; 92, "ultimo_nome" =&gt; "Barbson"),
      array("primeiro_nome" =&gt; "Benji", "pontuacao" =&gt; 90, "ultimo_nome" =&gt; "Warner")
    );
?&gt;</code></pre><p>Agora você pode obter o primeiro estudante pelo <code>primeiro_nome</code> dele com:</p><pre><code class="language-php">$estudantes[0]['primeiro_nome']</code></pre><h3 id="obter-o-comprimento-de-um-array-a-fun-o-count-"><strong>Obter o comprimento de um array - a função count()</strong></h3><p>A função <code>count()</code> é usada para retornar o comprimento (o número de elementos) de um array:</p><pre><code class="language-php">&lt;?php
  $carros = array("Volvo", "BMW", "Toyota");
  echo count($carros);
?&gt;</code></pre><h2 id="ordenando-arrays"><strong>Ordenando arrays</strong></h2><p>O PHP oferece várias funções para ordenar arrays. Esta página descreve as diferentes funções e inclui exemplos.</p><h3 id="sort-"><strong>sort()</strong></h3><p>A função <code>sort()</code> ordena os valores de um array em ordem alfabética/numérica ascendente (por exemplo, A, B, C, D, E... 1, 2, 3, 4, 5...).</p><pre><code class="language-php">&lt;?php
  $freecodecamp = array("free", "code", "camp");
  sort($freecodecamp);
  print_r($freecodecamp);
?&gt;</code></pre><p><strong><strong>Resultado:</strong></strong></p><pre><code class="language-text">Array
(
    [0] =&gt; camp
    [1] =&gt; code
    [2] =&gt; free
)</code></pre><h3 id="rsort-"><strong>rsort()</strong></h3><p>As funções <code>rsort()</code> ordenam os valores de um array em ordem alfabética/numérica decrescente (por exemplo, Z, Y, X, W, V... 5, 4, 3, 2, 1...).</p><pre><code class="language-php">&lt;?php
  $freecodecamp = array("free", "code", "camp");
  rsort($freecodecamp);
  print_r($freecodecamp);
?&gt;</code></pre><p><strong>Resultado<strong><strong><strong>:</strong></strong></strong></strong></p><pre><code class="language-text">Array
(
    [0] =&gt; free
    [1] =&gt; code
    [2] =&gt; camp
)</code></pre><h3 id="asort-"><strong><strong>asort()</strong></strong></h3><p>A função <code>asort()</code> ordena um array associativo, por seus valores, em ordem alfabética/numérica ascendente (por exemplo, A, B, C, D, E... 1, 2, 3, 4, 5...).</p><pre><code class="language-php">&lt;?php
  $freecodecamp = array("zero"=&gt;"free", "one"=&gt;"code", "two"=&gt;"camp");
  asort($freecodecamp);
  print_r($freecodecamp);
?&gt;</code></pre><p><strong><strong><strong><strong>Resultado:</strong></strong></strong></strong></p><pre><code class="language-text">Array
(
    [two] =&gt; camp
    [one] =&gt; code
    [zero] =&gt; free
)</code></pre><h3 id="ksort-"><strong>ksort()</strong></h3><p>A função <code>ksort()</code> ordena um array associativo, por suas chaves, em ordem alfabética/numérica ascendente (Ex. A, B, C, D, E... 1, 2, 3, 4, 5...)</p><pre><code class="language-php">&lt;?php
$freecodecamp = array("zero"=&gt;"free", "one"=&gt;"code", "two"=&gt;"camp");
ksort($freecodecamp);
print_r($freecodecamp);
?&gt;</code></pre><p><strong><strong><strong><strong>Resultado:</strong></strong></strong></strong></p><pre><code class="language-text">Array
(
    [one] =&gt; code
    [two] =&gt; camp
    [zero] =&gt; free
)</code></pre><h3 id="arsort-"><strong>arsort()</strong></h3><p>A função <code>arsort()</code> ordena um array associativo, por seus valores, em ordem alfabética/numérica decrescente (por exemplo, Z, Y, X, W, V... 5, 4, 3, 2, 1...)</p><pre><code class="language-php">&lt;?php
$freecodecamp = array("zero"=&gt;"free", "one"=&gt;"code", "two"=&gt;"camp");
arsort($freecodecamp);
print_r($freecodecamp);
?&gt;</code></pre><p><strong>Resultado<strong><strong><strong>:</strong></strong></strong></strong></p><pre><code class="language-text">Array
(
    [zero] =&gt; free
    [one] =&gt; code
    [two] =&gt; camp
)</code></pre><h3 id="krsort-"><strong>krsort()</strong></h3><p>A função <code>krsort()</code> ordena um array associativo, por suas chaves em ordem alfabética/numérica decrescente (Ex: Z, Y, X, W, V... 5, 4, 3, 2, 1...)</p><pre><code class="language-php">&lt;?php
$freecodecamp = array("zero"=&gt;"free", "one"=&gt;"code", "two"=&gt;"camp");
krsort($freecodecamp);
print_r($freecodecamp);
?&gt;</code></pre><p><strong><strong><strong><strong>Resultado:</strong></strong></strong></strong></p><pre><code class="language-text">Array
(
    [zero] =&gt; free
    [two] =&gt; camp
    [one] =&gt; code
)</code></pre><h2 id="formul-rios"><strong>Formulários</strong></h2><p>Os formulários são uma maneira de os usuários inserirem dados ou selecionarem dados da página. Os formulários servem para podermos armazenar os dados inseridos, bem como para permitir que informações sejam recuperadas para serem usadas.</p><p>Para fazer um formulário funcionar em linguagens como o PHP, você precisa de alguns atributos básicos em html. Na maioria dos casos, o PHP usa variáveis ​​super globais 'post' e 'get' para obter os dados do formulário.</p><pre><code class="language-html">&lt;html&gt;
&lt;body&gt;
  &lt;form method="get" action="target_proccessor.php"&gt;
      &lt;input type="search" name="search" /&gt;&lt;br /&gt;
      &lt;input type="submit" name="submit" value="Search" /&gt;&lt;br /&gt;
  &lt;/form&gt;
&lt;body&gt;
&lt;/html&gt;</code></pre><p>O atributo 'method' aqui informa ao formulário como enviar os dados do formulário. Em seguida, o atributo 'action' informa para onde enviar os dados do formulário para serem processados. Já o atributo 'name' é extremamente importante e deve ser o único na página com um valor, porque no PHP o valor do nome funciona como a identidade desse campo de entrada.</p><h2 id="verificando-os-campos-obrigat-rios-do-formul-rio"><strong>Verificando os campos obrigatórios do formulário</strong></h2><p>O PHP possui algumas funções para verificar se os campos de entrada obrigatórios foram atendidos. Essas funções são <code>isset</code>, <code>empty</code>, e <code>is_numeric</code>.</p><h3 id="verificando-o-formul-rio-para-ter-certeza-de-que-est-preenchido"><strong>Verificando o formulário para ter certeza de que está preenchido</strong></h3><p>As verificações <code>isset</code> servem para ver se o campo foi preenchido e não é nulo. Exemplo:</p><pre><code class="language-php">$primeiroNome = $_GET['primeiroNome'];

if(isset($primeiroNome)){
  echo "o campo primeiroNome foi preenchido". "&lt;br&gt;";
} else {
  echo "O campo não está preenchido."."&lt;br&gt;";
}</code></pre><h2 id="manipulando-as-entradas-do-formul-rio"><strong>Manipulando as entradas do formulário</strong></h2><p>Pode-se obter os valores de entrada dos campos de um formulário com as variáveis ​​globais $<em><em>POST</em></em> e <em><em>$GET</em></em>.</p><pre><code class="language-text">$_POST["primeiroNome"] or $_GET['ultimoNome']</code></pre> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
