Avatar ·

Qual a diferença entre include, require, include_once e require_once no PHP?

Olá a todos! Estou começando a aprender PHP e não consigo entender a diferença entre essas quatro construções para incluir arquivos. Parece que todas fazem a mesma coisa — inserem código de outro arquivo.

Eu tenho um arquivo config.php com as configurações do banco de dados:

<?php
$host = 'localhost';
$db = 'mydb';
$user = 'root';
$pass = '';
?>

E eu o incluo no index.php de diferentes maneiras:

<?php
include 'config.php';
// ou
require 'config.php';
// ou
include_once 'config.php';
// ou
require_once 'config.php';
?>

Todas as quatro opções funcionam, e eu vejo as variáveis do config.php. Qual é a diferença então? Quando usar cada uma?

Também notei uma coisa estranha: se eu escrever include 'config.php' duas vezes, recebo um erro de que as variáveis estão sendo redefinidas. Mas com include_once esse problema não acontece. Por que isso ocorre?

E o principal — o que vai