3
respostas

Erro ao chamar classe

Boa tarde, não entendi pq estou tendo esse erro "Fatal error: Class DescontoPorVendaCasada contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Desconto::desconto) in C:\xampp\htdocs\Design-Patterns\DescontoPorVendaCasada.php on line 5" ao chamar a classe

<?php

    require_once("global.php");

     class DescontoPorVendaCasada implements Desconto {

        private $proximo;

        public function calcula(Orcamento $orcamento) {
            if(aconteceuVendaCasadaEm($orcamento)) return $orcamento->getValor() * 0.05;
            else return $this->proximo->calcula($orcamento);
        }

        private function aconteceuVendaCasadaEm(Orcamento $orcamento) {
            return $this->existe("CANETA", $orcamento) && $this->existe("LAPIS", $orcamento);
        }

        private function existe($nomeDoItem, Orcamento $orcamento) {
            foreach ($orcamento->getItens() as $item) {
                if($item->getNome() == $nomeDoItem) return true;
            }
            return false;
        }

        public function setProximo(Desconto $proximo) {
            $this->proximo = $proximo;
        }

    }


?>
3 respostas

Oi Vítor, tudo bom?

O erro diz que sua classe DescontoPorVendaCasada implementa a interface Desconto mas ainda faltam algum(s) método(s) a serem implementados.

Verifica se na sua interface Desconto não tem nenhum método a mais que faltou implementar lá na DescontoPorVendaCasada =)

Qualquer problema é só falar,

Abraço

Acabei de conferir aqui e os nomes realmente estavam diferentes, porem ao mudar estou tendo esse erro agora

Fatal error: Uncaught Error: Call to undefined function aconteceuVendaCasadaEm() in C:\xampp\htdocs\Design-Patterns\DescontoPorVendaCasada.php:10 Stack trace: #0 C:\xampp\htdocs\Design-Patterns\Desconto500Reais.php(12): DescontoPorVendaCasada->desconto(Object(Orcamento)) #1 C:\xampp\htdocs\Design-Patterns\Desconto5Itens.php(12): Desconto500Reais->desconto(Object(Orcamento)) #2 C:\xampp\htdocs\Design-Patterns\CalculadoraDeDescontos.php(16): Desconto5Itens->desconto(Object(Orcamento)) #3 C:\xampp\htdocs\Design-Patterns\index.php(36): CalculadoraDeDescontos->desconto(Object(Orcamento)) #4 {main} thrown in C:\xampp\htdocs\Design-Patterns\DescontoPorVendaCasada.php on line 10

Oi Vitor, perdão pela demora.

Aparentemente seu novo erro ocorre na linha 10 do arquivo DescontoPorVendaCasada.php. Compartilha o arquivo aqui com a gente? Assim a gente pode dar uma direcionada melhor.

Porém, pelo erro Fatal error: Uncaught Error: Call to undefined function aconteceuVendaCasadaEm() ... Parece que o problema foi o acesso ao método privado aconteceuVendaCasadaEm().

Se você precisa acessar esse método de fora da classe DescontoPorVendaCasada, você precisa torná-lo público. Se o método está dentro da interface, a interface deve mudar.

Verifica se realmente é necessário acessar esse método de fora da classe =)

Abraço