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