Bom dia. Fiz a alteração para receber o parâmetro pelo construtor, entretanto, na hora de executar o projeto recebo o seguinte erro:
Argument 1 passed to XML::__construct() must implement interface IResposta, integer given, called in C:\wamp64\www\dp\aula3.3\Serialize.php on line 13 and defined in C:\wamp64\www\dp\aula3.3\XML.php on line 11
Segue minha interface, minha classe "Serialize" (que utilizei para definir a corrente), minha classe XML e a index.
<?php
interface IResposta
{
public function responde(Requisicao $req, Conta $conta);
//public function setProximo(IResposta $resposta);
}
<?php
require_once ("XML.php");
require_once ("CSV.php");
require_once ("Porcento.php");
require_once ("Invalido.php");
class Serialize
{
public function responde(Requisicao $req, Conta $conta)
{
$chain1 = new XML(2);
$chain2 = new CSV(3);
$chain3 = new Porcento(4);
$chain4 = new Invalido(1);
/*$chain1->setProximo($chain2);
$chain2->setProximo($chain3);
$chain3->setProximo($chain4);*/
return $chain1->responde($req, $conta);
}
}
<?php
class XML implements IResposta
{
private $proximo;
/* public function setProximo(IResposta $resposta)
{
$this->proximo = $resposta;
}*/
function __construct(IResposta $resposta)
{
$this->proximo = $resposta;
}
public function responde(Requisicao $req, Conta $conta)
{
if($req->getFormato() == Formato::$XML)
{
return "<conta><titular>" .$conta->getTitular(). "</titular><saldo>" .$conta->getSaldo(). "</saldo></titular>";
}
else
{
return $this->proximo->responde($req, $conta);
}
}
}
<?php
function autoLoad($class)
{
include_once $class.".php";
}
spl_autoload_register("autoLoad");
$conta = new Conta("Samuel", 1000);
$requisicao = new Requisicao(1);
$serialize = new Serialize();
echo $serialize->responde($requisicao, $conta);