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

Problemas com interface

Estou enfrentando um problema com o exercício. Estou implementando a interface Imposto na classe ICMS como no exemplo do vídeo, porém ainda estou tendo o erro:

Fatal error: Uncaught TypeError: Argument 2 passed to CalculadorDeImposto::calcula() must implement interface Imposto, instance of ICMS given.

Sabem me dizer por que o erro acontece mesmo tendo implementado a interface Imposto na classe ICMS?

index.php

require "Orcamento.php";
require "CalculadorDeImposto.php";
require "Imposto.php";
require "ICMS.php";
require "ISS.php";

$Orcamento = new Orcamento(100);

$CalculadorDeImposto = new CalculadorDeImposto();

echo $CalculadorDeImposto->calcula($Orcamento, new ICMS());

Classe CalculadorDeImposto:

class CalculadorDeImposto {
    public function calcula(Orcamento $Orcamento, Imposto $Imposto) {
        return $Imposto->calcula($Orcamento);
    }
}

Classe ICMS:

class ICMS implements Imposto{
    public function calcula(Orcamento $Orcamento) {
        return ($Orcamento->getValorOrcamento() * 0.05) + 50;
    }
}

Classe ISS:

class ISS implements Imposto {
    public function calcula(Orcamento $Orcamento) {
        return $Orcamento->getValorOrcamento() * 0.06;
    }
}

Interface Imposto:

interface Imposto {
    public function calcula(Orcamento $Orcamento);
}
6 respostas

mostra o código onde tu está instanciando os objetos pois pelo que eu vi o 2 argumento que vc está colocando não está implementando o imposto

Eu adicionei no tópico o index.php que é onde eu instancio as classes e chamo método calcula da classe CalculadorDeImposto.

O Segundo argumento é uma instância de ICMS, e como mostrei no tópico ela está implementando a interface Imposto

Pois é fiz igual ao teu e deu tudo certo cara tenta fechar o navegador e abrir de novo

Pois a olho não vi erro mais tu sabe como é programação as vezes o que parece está correto não está

não dá certo. Estou testando aqui: http://aulas.w3pixel.com.br/dp-02-04/

solução!

descobri o que era, por algum motivo as alterações que eu havia feito não foram salvas... o arquivo estava marcado como salvo, mas eu fechei e abri de novo e a alteração que eu havia feito pra adicionar o implements na classe não estava lá.