Curso de PHP: #17 - Include e Require

Curso de PHP: #17 - Include e Require

E ai, escoteiro! Bastante empolgado com tudo que viu até agora? Espero que sim porque esse será o nosso último post da parte introdutória desse curso. A partir do próximo post teremos uma abordagem mais avançada, então se você está sentindo dificuldade com alguns assuntos, acredito que esse seja o melhor momento para voltar algumas casas e rever o assunto.

Em nosso post anterior nós conhecemos as principais funções para manipulação de arrays, nativas do PHP, dessa forma já sabemos como manipular strings, arrays, e criar nossas próprias funções. Mas a depender do tamanho do nosso script tudo pode ficar meio bagunçado. Que tal aprender a organizar nossos arquivos?

O PHP nos permite carregar outro arquivo para dentro do arquivo que estamos trabalhando, de 4 formas diferentes (porém quase idênticas).

Include

O comando include como o próprio nome sugere, inclui alguma coisa em nosso código, mas o que exatamente? Ele inclui um outro arquivo.

Para esse exemplo vamos precisar criar um novo arquivo

  • 1) Clique no ícone de arquivos

image.png

  • 2) Vamos agora criar uma nova pasta. Clique no ícone "Add folder"

image.png

  • 3) Dê o nome "funcoes" (sem acentos) para a sua pasta.

image.png

  • 4) Clique em Add file

image.png

  • 5) Dê o nome "alunos.php" para esse novo arquivo

image.png

  • 6) Clique no novo arquivo e nele digite o seguinte código
<?php

function alunoAprovado(array $notas) {
    $total = 0;

    foreach($notas as $nota) {
        $total += $nota;
    }

    return $total >= 7;
}
  • 7) Clique agora no arquivo main.php e digite o seguinte código
<?php

$notas = [2, 4, 2];

var_dump(alunoAprovado($notas));

Ao executar esse código você receberá um belíssimo erro 🤭.

Mas, por quê?

Vamos analisar a mensagem de erro

Fatal error: Uncaught Error: Call to undefined function alunoAprovado() in /home/runner/CursoPHPAcampamentoDev/main.php:5
Stack trace:
#0 {main}
  thrown in /home/runner/CursoPHPAcampamentoDev/main.php on line 5
exit status 255
  1. Fatal error: Já vimos que esse carinha para a execução do nosso programa porque algo muito grave ocorreu.
  2. Call to undefined function alunoAprovado(): O PHP está dizendo que você chamou uma função que não foi definida, ou seja, que não existe.

Ué, mas como assim não existe, se a gente criou ela?

O Problema é que criamos ela em outro arquivo e o PHP não tem como saber que a gente vai querer usar essa função. Precisamos dizer isso para o PHP.

  • 8) Voltei no seu arquivo main.php e modifique o seu código para:
<?php

include "funcoes/alunos.php";

$notas = [2, 4, 2];

var_dump(alunoAprovado($notas));

Agora ao executar nosso código ele vai mostrar no console

bool(true)

Entendeu o que o include faz?

Include_once

O comando include_once funciona praticamente de forma idêntica ao include, mas ele resolve um problema bem grave que pode ocorrer ao trabalharmos com o include.

Veja esse exmplo:

<?php

include "funcoes/alunos.php";
include "funcoes/alunos.php";

$notas = [2, 4, 2];

var_dump(alunoAprovado($notas));

Ao executar esse programa você receberá o seguinte erro

Fatal error: Cannot redeclare alunoAprovado() (previously declared in /home/runner/CursoPHPAcampamentoDev/funcoes/alunos.php:3) in /home/runner/CursoPHPAcampamentoDev/funcoes/alunos.php on line 3
exit status 255

O PHP está dizendo que não é possível redeclarar a função alunoAprovado() porque ela já foi declarada anteriormente no arquivo funcoes/alunos.php

Ai você deve estar pensando: Mas eu não redeclarei nada, meu PHP tá quebrado 😢.

Calma. Não tem nada de errado com o seu PHP. O que acontece é que quando a gente chamou o comando include 2 vezes passando o caminho do mesmo arquivo, ele carregou o mesmo bloco de código 2 vezes, assim o bloco da declaração da função foi executado 2 vezes e por isso gerou o erro.

Vamos fazer uma pequena mudança no nosso código

<?php

include_once "funcoes/alunos.php";
include_once "funcoes/alunos.php";

$notas = [2, 4, 2];

var_dump(alunoAprovado($notas));

Ao executar o código agora, você verá que tudo funciona perfeitamente sem nenhum erro, mas... por quê?

Como eu disse um pouco mais acima, o include_once funciona praticamente idêntico ao include, porém ele antes de incluir o arquivo, analisa se aquele arquivo já não foi incluído antes, caso já tenha sido incluído ele não inclui de novo 😎.

Require e Require_once

Os comando require e require_once também funcionam praticamente idêntico ao include, porém a diferença é mais conceitual.

Imagine que você está criando um sistema e colocou um "botão de ajuda" em um pasta e o incluiu no seu código usando o include. Porém algum outro programador não sabia que você estava usando aquele botão e simplesmente apagou o arquivo.

Faz sentido o PHP gerar um erro fatal, matar nossa aplicação e o cliente não conseguir fazer uma compra que nos gerará dinheiro, porque um simples botão de ajuda não estava presente? Acredito que não.

Porém imagine que ao invés de um botão de ajuda fosse uma função que realiza a venda. Ai sim faria sentido, porque não teria como o cliente finalizar a compra se a função não existe.

Então a diferença é essa. Se você está importando para o seu código algo que não pode faltar de jeito nenhum, você usa o require (ou o require_once se ele não puder ser importado em duplicidade), mas caso o que você esteja importado não for tão importante assim, você usa o include ou include_once 😉.

E é isso escoteiro, esse é todo o conhecimento básico que você precisa para dar seus primeiros passos como programador, a partir de agora o curso será um pouco mais avançado, então revise os assuntos e vamos com todo o gás!!!

Até a próxima!!!