Eu não peguei direito a funcionalidade de namespace. É apenas um escopo que delimita o que eu farei na classe? Quando usei namespace 'Alura' e, depois, tentei instanciar o objeto usuario, deu BUG --'
Eu não peguei direito a funcionalidade de namespace. É apenas um escopo que delimita o que eu farei na classe? Quando usei namespace 'Alura' e, depois, tentei instanciar o objeto usuario, deu BUG --'
Uma outra maneira de enteder os namespaces é comparar ele com álbuns de música.
Imagina que você fala o seguinte pro Spotify:
"ô spotify, toca a música que chama "One" para mim!"
Só que tem um problema: o Ed Sheeran tem uma música que chama One, e o Metallica também tem uma música que chama One.
E agora? como que o Spotify vai saber qual que ele tem que tocar?
Para não ter esse tipo de conflito, a gente poderia falar para ele o seguinte:
"Toca a música One do Ed Sheeran"
ou se a gente fizesse um código fictício em PHP, poderiamos falar para ele:
ao invés de importar a música One, pois tem muitas com esse nome e vai dar conflito:
use One;
a gente poderia falar algo como:
use EdSheeran\One;
É um código fictício para tentar ilustrar a ideia do namespace.
O objetivo principal do namespace é a gente evitar a colisão de nomes entre classes, no curso, a gente criou um namespace chamado \App\Alura\ e criamos algumas classes como a Contato lá dentro.
Isso é uma boa prática porque imagina que a gente fosse utilizar alguma dependência que a gente baixou pela internet ou pelo Composer, e nisso tinha uma classe que chamava Contato também, ia dar conflito! porque o PHP não ia conseguir saber qual das duas classes ele tem que usar.
Um outro jeito de pensar no que é o namespace é como se ele fosse um sobrenome para a classe, para o PHP poder diferenciar ele quando tem classes com o mesmo nome, então para a gente utilizar a classe teríamos que usar o nome completo dela, namespace + classe. ^^
Espero ter ajudado, se não tiver ficado claro pra você me avisa porque namespace é uma coisa importante no PHP, você vai usar isso muito mais para frente, principalmente quando for utilizar frameworks e códigos de outras pessoas, tô aqui pra te ajudar a entender :)
Que explicação!! Muito Obrigado!