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

Uncaught Error: Class 'Alura\DesignPattern\EstadosOrcamento\EmAprovacao' not found

Olá, eu estou quebrando a cabeça com esse problema que acredito que seja algum detalhe faltando.

quando eu tento rodar o gerar-pedido.php ele me retorna esse erro

o php storm encontra a classe se eu clicar nela no construct do orçamento, então creio que seja algo no php. Alguém pode me dar uma luz?

segue código.

EDIT: Não faço ideia o que tinha errado, mais eu renomeei a pasta EstadosOrcamento e depois voltei pro original e aí funcionou.

Obrigado.

PHP Fatal error:  Uncaught Error: Class 'Alura\DesignPattern\EstadosOrcamento\EmAprovacao' not found in /home/cesar/Documents/Alura/FormacaoArquitetoPHP/DesignPattersPadroesComportamentais/src/Orcamento.php:17
Stack trace:
#0 /home/cesar/Documents/Alura/FormacaoArquitetoPHP/DesignPattersPadroesComportamentais/gera-pedido.php(13): Alura\DesignPattern\Orcamento->__construct()
#1 {main}
  thrown in /home/cesar/Documents/Alura/FormacaoArquitetoPHP/DesignPattersPadroesComportamentais/src/Orcamento.php on line 17
<?php


namespace Alura\DesignPattern;

use Alura\DesignPattern\EstadosOrcamento\EmAprovacao;
use Alura\DesignPattern\EstadosOrcamento\EstadoOrcamento;

class Orcamento
{
    public int $quantidadeDeItens;
    public float $valor;
    public EstadoOrcamento $estadoAtual;

    public function __construct()
    {
        $this->estadoAtual = new EmAprovacao();
    }

    public function aplicaDescontoExtra()
    {
        $this->valor -= $this->estadoAtual->calculaDescontoExtra($this);
    }

    public function aprova()
    {
        $this->estadoAtual->aprova($this);
    }

    public function reprova()
    {
        $this->estadoAtual->reprova($this);
    }

    public function finaliza()
    {
        $this->estadoAtual->finaliza($this);
    }
}
<?php


namespace Alura\DesignPattern\EstadosOrcamento;


use Alura\DesignPattern\Orcamento;

class EmAprovacao extends EstadoOrcamento
{
    public function calculaDescontoExtra(Orcamento $orcamento): float
    {
            return $orcamento->valor * 0.05;
    }

    public function aprova(Orcamento $orcamento)
    {
        $orcamento->estadoAtual = new Aprovado();
    }

    public function reprova(Orcamento $orcamento)
    {
        $orcamento->estadoAtual = new Reprovado();
    }
}
"autoload": {
    "psr-4": {
      "Alura\\DesignPattern\\": "src/"
    }
  }
2 respostas

Em que pasta tá o arquivo EmAprovacao.php?

solução!

Então tava na pasta certa, EstadosOrcamento, mudei o construct pra aprovado/finalizado/reprovado e tive o mesmo erro, aí tive a ideia de renomear a pasta que tavam os arquivos e quando voltei pro original novamente tudo funcionou.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software