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

Dúvida PHP Storm

Olá, estou com uma dúvida boba, em diversas partes do código do curso o PHP Storm retorna na guia "Problems" alguns warnings com o título "Qualifier can be replaced with an import".

Isso acontece no exemplo abaixo:

interface StudentRepository
{
    public function allStudents(): array;
    public function studentsBirthAt(\DateTimeInterface $birthDate): array;
    public function save(Student $student): bool;
    public function remove(Student $student): bool;
}

Se vou na linha do \DateTimeInterface e aceito a sugestão dele, é adicionado o "use" no inicio do arquivo e retirada a barra invertida antes do DateTimeInterface, ficando assim:

[...]
use DateTimeInterface;

interface StudentRepository
{
    public function allStudents(): array;
    public function studentsBirthAt(DateTimeInterface $birthDate): array;
    public function save(Student $student): bool;
    public function remove(Student $student): bool;
}

Sobre isso tenho 2 dúvidas:

1) Porque usar a barra ali?

2) Qual a melhor prática, usar o "use" no inicio do arquivo ou manter a barra invertida direto na function?

Grato pela ajuda :)

3 respostas
solução!

Olá Marcelo,

Essa barra indica o namespace raiz do PHP, se você não utilizar a barra o PHP vai procurar a classe chamada dentro do namespace atual. Nesse seu exemplo se não utilizar a barra o PHP vai procurar por:

Alura\Pdo\Domain\Repository\DateTimeInterface
|-----Namespace atual------||-Classe chamada-|

Sobre qual forma utilizar, não existe uma regra definida, acredito que se você chamar a classe apenas uma vez pode utilizar a barra e se for utilizar a classe em vários pontos utiliza o use

Espero ter ajudado, qualquer coisa e só falar!

Lucas, obrigado! Agora entendi :)

Sempre que utilizar um método do próprio PHP devo indicar que ele estará no namespace raiz.

Sem problemas Marcelo!

É quase isso que você falou, só não é obrigatório sempre, nesse caso é necessário a barra porque você definiu um namespace no início do arquivo, em um cenário mais simples onde a gente não define um namespace não é necessário o uso da barra (mas você pode usar a barra sem erros):

  • Com um namespace definido o PHP não vai encontrar a classe Exception pois ela vai ser procurada dentro de App\Test
<?php

namespace App\Test;

$ex = new Exception("Teste");
echo "Não funciona!";
  • Sem um namespace definido o PHP vai econtrar a classe Exception sem problemas, com ou sem a barra:
<?php

$ex = new Exception("Teste");
echo "Funciona com ou sem a barra"