1
resposta

Problema ao trabalhar com a "enum" sugerida

Olá! Estou fazendo o exercício proposto, porém estou enfrentando problemas ao tentar utilizar a classe sugerida como enum.

Abaixo segue todo o código que estou implementando para que possam verificar o que está dando errado. Desde já agradeço!

Formato.php

class Formato {
    public static $XML = 1;
    public static $CSV = 2;
    public static $PORCENTO = 3;
}

Requisicao.php

class Requisicao {
      private $formato;

      function __construct($formato) {
        $this->formato = $formato;
      }

      public function getFormato() {
          return $this->formato;
      }
    }

Conta.php

class Conta {
    private $nome;
    private $saldo;

    function __construct($novoNome, $novoSaldo) {
        $this->nome = $novoNome;
        $this->saldo = $novoSaldo;
    }

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

    public function getSaldo() {
        return $this->saldo;
    }
}

IResposta.php

interface IResposta {
      public function responde(Requisicao $req, Conta $conta);
      public function setProxima(IResposta $resposta);
    }

SerializadoraDeConta.php

class SerializadoraDeConta {
    public function serializarConta(Conta $conta, Requisicao $req) {
        $respostaXML = new RespostaXML();
        $respostaCSV = new RespostaCSV();
        $respostaPORCENTO = new RespostaPORCENTO();

        $respostaXML->setProxima($respostaCSV);
        $respostaCSV->setProxima($respostaPORCENTO);

        return $respostaXML->responde($req, $conta);
    }
}

RespostaXML.php

class RespostaXML implements IResposta {
    private $proximaResposta;

    public function responde(Requisicao $req, Conta $conta) {
        if($req->getFormato() == Formato::XML) {
            $contaSerializada = "<conta><nome>".$conta->getNome()."</nome><saldo>".$conta->getSaldo()."</saldo></conta>";
            return $contaSerializada; 
        } else {
            $this->proximaResposta->responde($req, $conta);
        }
    }

    public function setProxima(IResposta $proxima) {
        $this->proximaResposta = $proxima;
    }
}

RespostaCSV.php

class RespostaCSV implements IResposta {
    private $proximaResposta;

    public function responde(Requisicao $req, Conta $conta) {
        if($req->getFormato() == Formato::CSV) {
            $contaSerializada = "nome;saldo\n".$conta->getNome().";".$conta->getSaldo();
            return $contaSerializada; 
        } else {
            $this->proximaResposta->responde($req, $conta);
        }
    }

    public function setProxima(IResposta $proxima) {
        $this->proximaResposta = $proxima;
    }
}

RespostaPORCENTO.php

class RespostaPORCENTO implements IResposta {
    private $proximaResposta;

    public function responde(Requisicao $req, Conta $conta) {
        if($req->getFormato() == Formato::PORCENTO) {
            $contaSerializada = "nome%saldo\n".$conta->getNome()."%".$conta->getSaldo();
            return $contaSerializada; 
        } else {
            return "Requisição não suportada. Verifique.";
        }
    }

    public function setProxima(IResposta $proxima) {
        // faz nada
    }
}

index.php

$conta = new Conta("Titular", 5000);

echo "Resposta serializada";
echo "<br />";

$serializadoraDeConta = new SerializadoraDeConta();
$req = new Requisicao(1);
echo "XML: ";
echo "<br />";
echo $serializadoraDeConta->serializarConta($conta, $req);
echo "<br />";

$req = new Requisicao(2);
echo "CSV: ";
echo "<br />";
echo $serializadoraDeConta->serializarConta($conta, $req);
echo "<br />";

$req = new Requisicao(3);
echo "PORCENTO: ";
echo "<br />";
echo $serializadoraDeConta->serializarConta($conta, $req);
echo "<br />";

O erro que me é retornado é o seguinte: Fatal error: Undefined class constant 'XML' in /Applications/XAMPP/xamppfiles/htdocs/estudo_php/design_patterns/interface_bancaria/RespostaXML.php on line 6

1 resposta

Onde está o require da classe Formato?