Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

namespace / use e require_once

Alguém pode explicar como funciona o namespace e o use, e qual a difereça deles para o require_once ? Até então nos cursos de php era usado apenas o require_once, já no curso de php 7 passa a ser usado o namespace e o use

2 respostas

O namespace indica o escopo de uma classe/arquivo. Ele é útil para evitar colisão de classes que tem o mesmo nome. O namespace facilita a inclusão de classes com mesmo nome, mas que estão em namespaces diferentes. É uma forma de organizar as classes da aplicação.

O use indica que determinada classe vai ser importada e usada por um arquivo/script específico.

Já o require, require_once, include ou include_once permite a inclusão de qualquer trecho de código presente em outro arquivo.

solução!

Oi Lucas, tudo bom?

Como nosso amigo Gabriel disse, o objetivo principal do namespace é evitar conflitos de arquivos. Vamos supor que na sua aplicação, você queira utilizar uma API de Login com o facebook. Pra isso você precisaria de um arquivo semelhante a "Login.php" fornecido pelo facebook. Mas a gente já tem um arquivo desse no nosso sistema! Por isso declaramos o namespace, pra diferenciar um do outro. Ao declararmos, podemos apenas usar a classe com o termo use ou instancia-la pelo namespace todo:

<?php
namespace NomeDoProjeto\Model;

class Login{
// conteudo da classe
}

<?php
namespace NomeDoProjeto\Test;

use NomeDoProjeto\Model\Login;

class TestaLogin{
    $meuLogin = new Login(); // aqui utilizamos apenas o nome da classe pois estamos usando o namespace
    $fbLogin = new facebook\Login(); // aqui utilizamos o nome completo do namespace(full qualifed name) para instanciar um login do facebook sem conflitar com o nosso login
}

Já o require_once é uma forma de importar o arquivo, sem essa preocupação de compatibilidade.

O conceito de namespace é um recurso muito util da orientação a objetos. É o equivalente ao conceito de pacotes em java, caso você tenha alguma afinidade com a linguagem.

Qualquer duvida, compartilhe com a gente =)