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

A função temIsbn está retornando falsa

Eu percebi que o método getIsbn da classe Livro não estava exibindo o isbn. Fui testar a função temIsbn e verifiquei que ela está retornando falsa.

Produto.php

function temIsbn() {
                $this instanceof Livro;
            }

Por que será que está retornando falsa? Sendo que o Livro extends Produto ?

Livro.php

class Livro extends Produto {    

    private $isbn;

    public function getIsbn() {
                return $this->isbn;
            }

    public function setIsbn($isbn) {
                $this->isbn = $isbn;
            }  

}

O que parece é que o extends não está funcionando.

5 respostas

Olá, Thiago.

Como está a parte do código que você usa o objeto Livro?

Aqui fica a função listaJogos() Veja que tem o if que verifica se é Livro para poder dar new na classe Livro ou na classe Produto

ProdutoDao.php

function listaJogos(){

    /* Cria um array vazio */
    $jogos = array();

    /* Faz a consulta no banco */
    $resultado = mysqli_query($this->conexao, "select * from jogos");

    /* Faz um loop para mostrar todos os dados do banco */
    /* enquanto tiver mostrando dados dentro do while o loop continua  */
    while($jogo_array = mysqli_fetch_assoc($resultado)) {



        /* Antes era: $jogo->preco = $jogo_array['preco']; */
        $nome = $jogo_array['nome'];                
        $preco = $jogo_array['preco'];
        $usado = $jogo_array['usado'];
        $tipoProduto = $jogo_array['tipoProduto'];


        if($tipoProduto == "Livro"){

            $jogo = new Livro($nome, $preco, $usado);
            $jogo->setImagem($jogo_array['imagem']);
            $jogo->setIsbn($jogo_array['isbn']);
            $jogo->setTipoProduto($jogo_array['tipoProduto']);

        } else {        

            $jogo = new Produto($nome, $preco, $usado);
            $jogo->setImagem($jogo_array['imagem']);            
            $jogo->setTipoProduto($jogo_array['tipoProduto']);

        }

        $jogo->id = $jogo_array['id'];

        /* Veja acima que montamos um objeto fechadinho com todas as informações */


        /* Adiciona todos os produtos que retornou dentro da array */
        /* Coloca dentro do array $jogos os $jogo */
        array_push($jogos, $jogo);

    }

    /* Retorna o array completo */
    return $jogos;   

}

E aqui é a home.php onde lista todos os produtos do banco e aonde eu verifico se temIsbn

$produtoDao = new ProdutoDao($conexao);

                $jogos = $produtoDao->listaJogos();

                foreach ($jogos as $jogo){
<td>
        <?php
            if($jogo->temIsbn()){

                        echo "sim";

                    }else {

                        echo "não";

                    }

       ?>

Esse echo "sim" e "não" coloquei apenas para testar. Eu estou usando da seguinte forma:

Veja que uso o método getIsbn() que está dentro da classe Livro.php que estende de Produto.php Esse getIsbn não está dando nenhum erro, ele apenas não mostra nada, fica em branco.

<?php
                    if($jogo->temIsbn()){

                        echo $jogo->getIsbn();

                    }

                    ?>
solução!

Thiago. Troca o echo por var_dump:

var_dump($jogo->getIsbn());

Bom dia, Marco! O var_dump estava me retornando null. Descobri que eu havia esquecido de colocar $isbn = $jogo_array['isbn']; na classe listaJogos()

Agora está certinho. Obrigado!