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?
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
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…
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
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.