Utilizando namespaces

Estou com uma dúvida à respeito da utilização de namespaces com PHP.

Tenho a seguinte classe:

<?php

namespace App\Model;

class Categoria
{
    private $nome;

    public function setNome($nome)
    {
        $this->nome = $nome;
    }

    public function getNome()
    {
        return $this->nome;
    }
}

E também este código para executar:

<?php

use App\Model\Categoria;

$c1 = new Categoria();
$c1->setNome('Fantasia');
echo $c1->getNome();

Porém, ao executar recebo o erro: “Class not found”. O que estou fazendo de errado?

Estava dando uma lida aqui: acredito que o problema é que falta eu implementar um autoload para as classes. Estou correto?

1 curtida

Exato! Infelizmente o php tem esse problema de design, quando se indica um namespace com use, você não está necessariamente importando a classe/pacote, precisa de um autoload, pesquise implementação nas PSR’s

https://www.php-fig.org/psr/

1 curtida

Você não incluiu o arquivo?

Vamos lá, para ratificar os dizeres. O PHP não tem problema de design sobre namespace é assim que funciona e é assim que deve ser feito, se não contiver incluído no arquivo não vai funcionar porque o mesmo precisa saber que existe tal namespace e a programação dentro (que pode ser classes, funções, etc.).

A técnica utilizada pode ser auto_load ou um include/require.

Ai você pode vir assim falar para mim, mas, por exemplo Java e C# como exemplo faz isso naturalmente, na verdade a ferramentas na hora da compilação faz isso para você e muitos não sabem disso.

Bom, o tópico já se passou um bom tempo e não vamos entrar em discussão, porém só te digo uma coisa, php não é naturalmente orientado a objetos, ele suporta orientação a objetos o que é uma coisa totalmente diferente de C# e Java como vc mesmo citou que foram construídas com OO em mente, logo, não criar meios para “incluir o arquivo através do namespace” na minha visão é sim um problema de design, pois deixar a cargo do programador esse tipo de tarefa é sim uma bela de uma gambiarra.

Tanto é que existe até recomendações para importar classes, etc…

https://www.php-fig.org/psr/psr-4/

Agora me diz se isso não é uma forma de padronizar uma gambiarra?

Apesar de trabalhar com php a uns 10, não sou “sabe tudo” mas sei muito bem como funciona pelo menos o básico da linguagem e seu comportamento assim como reconhecer onde ela possui vantagens e desvantagens se comparada a outras tecnologias, agora vc dizer:

É argumento de conformista ou de quem não se aprofundou no assunto e não é pq é assim que precisa continuar assim, afinal existem as rfc’s (https://wiki.php.net/rfc/howto) justamente para isso, sugerir melhorias na linguagem (hoje plataforma) tanto pela comunidade quanto pelos desenvolvedores (zend pra ser mais exato)…

Agora se ninguém se manifestou com uma coisa dessas, é um simples fato de conformismo, já que a maioria senão todos os frameworks fazem esse trabalho porco para o programador…

Não estou crucificando o php, afinal também uso no dia a dia, mas não reconhecer que tem falhas é no mínimo “tapar o sol com a peneira” e de certa forma inflexível de sua parte…

Agora vc como todo poderoso moderador se não tem um argumento descente, faça igual fez nesse tópico e feche-o sem responder:

Mas enfim, cada um com sua visão, passar bem e sucesso

1 curtida

Iniciando os trabalhos.

As suas justificativas não me convenceram e você não focou no próprio problema que é a falta de conhecimento, a parte porca que você disse é feito em todas as linguagens de programação, onde as mesmas eu nunca citei que não tem problemas, todas elas tem problemas.

Agora a parte do namespace que é o fator da pergunta e respeito a sua opinião mas, discordo em diversos pontos porque falta realmente conhecimento e eu programo em PHP quando nem tinha POO é um fator que as pessoas acham que a linguagem programa por si e isso não é realidade.

PHP sim tem problemas em vários aspectos que poderiam ser melhorados, agora falar falta de design em algo que a pessoa está programando errado é sim um falha de conhecimento, goste ou não da minha opinião mediante fator técnico, se a equipe de desenvolvimento do PHP não arruma entre no Github deles e inicie um issue e relate que você acredita ser um problema de design, falar para mim não adianta, não muda o fator que a linguagem faz assim e entende que deve ser feita até o momento assim.

Se acha que fui desrespeitoso com você, estou aqui humildemente pedindo desculpas, agora em nenhum momento tive o desrespeito com você, inclusive o link da pergunta que você postou o seu código funciona no linux e nos outros S.O. não funciona, isso sim é um problema do PHP.

Obrigado sem mais.