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

Dúvida sobre passar o próximo formato no construtor da classe

Fiz a seguinte implementação, não sei se está correta, gostaria da opinião de vocês. Segue o trecho que interessa na dúvida, em relação à passar o próximo formato no construtor da classe:

    interface Resposta {
        public function responde(Requisicao $req, Conta $conta);
        public function __construct(Resposta $proximo = null);
    }

    class retornoInvalido implements Resposta {
        private $proximaResposta;

        public function __construct(Resposta $proximo=null) {
            $this->proximaResposta = $proximo;
        }

        public function responde(Requisicao $req, Conta $conta) {
            return "Formato inválido";
        }
    }

            //trecho da montagem da corrente:
            $formatoInvalido = new retornoInvalido();
            $formatoPorcentagem = new retornoPorcentagem( $formatoInvalido );
            $formatoCSV = new retornoCSV( $formatoPorcentagem );
            $formatoXML = new retornoXML( $formatoCSV );

            return $formatoXML->responde($req, $conta);

Não sei se é correto fazer isso, mas na interface eu já defini que deve ser passado um objeto do tipo resposta ou se nada for passado ele usa null. Com isso, todos que forem implementar a classe resposta deverão criar este método construtor padronizado.

Posso colocar um construtor na interface? A maneira como pensei está correta?

2 respostas

Opa, não sou especialista em php, mas pensando em orientação a objetos, o construtor é um detalhe mais específico da implementação.. não me parece que é legal deixar isso numa interface...

solução!

Então, como o Alberto falou, pensando nos conceitos de OO, não é legal ter a assinatura do construtor numa interface não. Infelizmente o PHP permite isso, mas recomendo não usar.

Fugindo do assunto um pouco, dá uma olhada nas PSRs 1 e 2 sobre nomenclatura de classes. É legal seguir o padrão DestaForma.

Fora isso, passar o próximo item no construtor é uma ótima solução sim, Wilhan.

Abraços e bons estudos.