Olá Pessoal,
Muitas pessoas tiram dúvidas de PHP comigo e certo dia uma delas me perguntou: "Qual a diferença entre Include_once e Require_once?"
Bom, ambos os comandos no PHP fazem a mesma coisa: Incluir um script em php na página apenas uma vez, ou seja, quando utilizamos várias vezes um mesmo script na página e se por acaso dentro deste script eu fazer o uso de outro que já foi usado na hierarquia, o include ou require once irá importar uma única vez, do contrario se usar o include ou require normal para cada chamada será importado o script.
Vou dar um exemplo utilizando o include que fica mais fácil de entender:
Temos 3 scripts, o funcao.php, index.php e contato.php
Em funcao.php temos:
<?
function MeuNome()
{
echo "Emmanuel Alves";
}
?>
Já em index.php eu faço a importação do script funcao.php e contato.php se eu passar na minha querystring ?acao=contato, por exemplo: http://localhost/teste/index.php?acao=contato
<?
include "funcao.php";
if ($_GET["acao"] == "contato")
include "contato.php";
else
echo "nenhuma página foi definida";
?>
Porém, dentro do script contato.php eu também faço o uso do funcao.php (por algum motivo que só "Bial" pode explicar ehehehe)
<?
include "funcao.php";
echo "minha página de contato";
?>
Se você executar a página index.php?acao=contato, o PHP irá me retorna uma mensagem de warning, dizendo que a função "meunome()" não pode ser re-declarada:
Fatal error: Cannot redeclare meunome() (previously declared in C:apache2triadhtdocs estefuncao.php:5) in C:apache2triadhtdocs estefuncao.php on line 3
Isso aconteceu porque o index.php está usando o funcao.php que por sua vez usa o contato.php para exibir quando a querystring é "acao=contato" e esta, por último, também usa o funcao.php!!
Falei muito, mas não falei nada!!
Utilizando-se como base o exemplo anterior, se no lugar de utilizar include "funcao.php" no index.php e no contato.php, usasse include_once o script funcionaria perfeitamente, pois o PHP apenas irá incluir o script uma vez, mesmo eu colocando várias chamadas ao include_once dentro dos scripts.
Mas qual é a diferença entre include_once e require_once?
Como falei, ambos são iguais, porém, quando vemos a documentação sobre include e require, lemos que quando acontece um erro no include, por exemplo, o arquivo não existe, o PHP apenas mostra um "warning", ou seja, um aviso ao programador dizendo "Olha, o arquivo não existe, mas eu vou continuar". Já o require é mais drástico ao ponto de não permitir que a aplicação seja continuada se acontecer algum erro. Utilizando o exemplo anterior, se o arquivo não existe, o PHP avisa "O arquivo não existe e ponto final" e termina a execução do script sem mostrar o resto do arquivo.
Nessa matéria expliquei um pouco do uso do include_once e a diferença entre o require e include, espero que tenham gostado.
Até a próxima.