Quando faço as chamadas das opções de Resposta no Chain of Responsibility, tem uma que deve passar como parametro NULL.
$respostaPorcento = new RespostaEmPorcento(NULL);
onde eu passo NULL ele deve ser uma classe do tipo interface chamada Resposta que segue a estrutura conforme os exercícios. Porém ele faz uma validação caso o tipo de interface Resposta seja null, ele não faz nada. Como faço para passar NULL nesse caso. Mensagem de erro que estou recebendo: Catchable fatal error: Argument 1 passed to RespostaEmPorcento::__construct() must implement interface IResposta, null given, called in /var/www/html/alura/design-patterns-php-um/conta/RequisicaoPorTipoFormato.php on line 5 and defined in /var/www/html/alura/design-patterns-php-um/conta/RespostaEmPorcento.php on line 5 Segue os códigos:
<?php
class RequisicaoPorTipoFormato{
public function requisicaoPorTipoFormato(Requisicao $requisicao, Conta $conta){
$respostaPorcento = new RespostaEmPorcento(NULL);
$respostaXML = new RespostaEmXml($respostaPorcento);
$respostaCSV = new RespostaEmCSV($respostaXML);
$respostaCSV->responde($requisicao, $conta);
}
}
?>
<?php
class RespostaEmPorcento implements IResposta {
private $outraReposta;
function __construct(IResposta $outraResposta) {
$this->outraResposta = $outraResposta;
}
public function RespostaEmPorcento() {
$this->outraResposta = null; // nao recebi a proxima!
}
public function responde(Requisicao $requisicao, Conta $conta) {
if($requisicao->getFormato() == Formato::PORCENTO) {
echo $conta->getTitular() . '%' . $conta->getSaldo();
} else if(!is_null($outraResposta)){
$outraResposta->responde($requisicao, $conta);
} else {
// não existe próxima na corrente, e ninguém atendeu a requisição!
// poderíamos não ter feito nada aqui, caso não fosse necessário!
throw new Exception("Formato de resposta não encontrado");
}
}
}
<?php
interface IResposta{
public function responde(Requisicao $requisicao, Conta $conta);
//public function setProximo(Resposta $resposta);
}
?>