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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
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.
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 =)