Namespace Link to heading

Namespaces possibilitam o agrupamento de classes, interfaces, funções e constantes, visando evitar o conflito entre seus nomes, atuando como um encapsulador para estes itens. Vejamos o exemplo.

<?php

namespace Pokedex\Model;

class Pokemon {
    const TOTAL = 151;
    
    function getType($city) { ... }
}

?>

Dessa maneira, nossa classe Pokemon está sob o namespace Pokedex\Model, isso nos permite o seu uso da seguinte maneira.

<?php

namespace Pokedex\Http\Controllers;

use Pokedex\Model\Pokemon;
use Pokedex\Model\Battle as PB;

class BattleController
{
    public function getAvailablePokemons()
    {
        $city = "Lavender Town";
        $types = Pokemon::getType($city);
        
        $weakness = PB::getDisadvantageOfType($types);
        
        echo Pokemon::TOTAL; // 151
        
        ...
    }
}

?>

Utilizando do construtor use podemos acessar facilmente tanto as funções como as constantes do nosso model Pokemon.

O construtor use é útil quando vamos chamar a mesma função de novo e de novo no mesmo arquivo de código ou chamar diferentes funções, constantes ou classes de um namespace específico, tornando o nosso código muito mais legível.

Nota: Namespaces NÃO são equivalentes a Classes. Um namespace é um ambiente de isolamento onde uma classe, função, constante, trait e interface são definidas e, portanto, protegidas de erro de colisão de nomes de funções, classes, etc. de ambientes diferentes.