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
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 =)