Ao testar o tipo da classe, ele não tá carregando os valores do banco, ficando as propriedades ISBN, Taxa de Impressão e WaterMark, em branco.
O que pode ser?
No Produto.php, tenho esse código:
public function temIsbn() {
return ($this instanceof Livro); // || ($this instanceof LivroFisico) || ($this instanceof Ebook);
}
public function temTaxaImpressao() {
return $this instanceof LivroFisico;
}
public function temWaterMark() {
return $this instanceof Ebook;
}
public function atualizaBaseadoEm($params) {
if ($this->temIsbn) {
$this->setIsbn($params['isbn']);
}
if ($this->temTaxaImpressao) {
$this->setTaxaImpressao($params['taxaImpressao']);
}
if ($this->temWaterMark) {
$this->setWaterMark($params['waterMark']);
}
}
E no produto-formulário, tenho esse código:
<?php require_once("cabecalho.php");
require_once("logica-usuario.php");
verificaUsuario();
$tipoProduto = $_POST['tipoProduto'];
$factory = new ProdutoFactory();
$produto = $factory->criaPor($tipoProduto, $_POST);
$produto->atualizaBaseadoEm($_POST);
$produto->getCategoria($categoria)->setId(2);
$categoriaDao = new CategoriaDao($conexao);
$categorias = $categoriaDao->listaCategorias();
?>
<h1>Formulário de cadastro</h1>
<form action="adiciona-produto.php" method="post">
<table class="table">
<?php include("produto-formulario-base.php"); ?>
<tr>
<td colspan="2"><button class="btn btn-primary" type="submit">Cadastrar</button></td>
</tr>
</table>
</form>
<?php include("rodape.php"); ?>
E no produto-formulario-base.php, tem esse código:
<tr>
<td>Nome</td>
<td> <input class="form-control" type="text" name="nome" value="<?=$produto->getNome()?>"></td>
</tr>
<tr>
<td>Preço</td>
<td><input class="form-control" type="number" name="preco" value="<?=$produto->getPreco()?>"></td>
</tr>
<tr>
<td>Descrição</td>
<td><textarea class="form-control" name="descricao"><?=$produto->getDescricao()?></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="checkbox" name="usado" value="true" <?=$produto->getUsado()?"checked":""?>> Usado</td>
</tr>
<tr>
<td>Categoria</td>
<td>
<select name="categoria_id" class="form-control">
<?php foreach($categorias as $categoria) : ?>
<option value="<?=$categoria->getId()?>" <?=$produto->getCategoria()->getId()==$categoria->getId()?"selected":""?>><?=$categoria->getNome()?></option>
<?php endforeach ?>
</select>
</td>
</tr>
<tr>
<td>Tipo do produto</td>
<td>
<select name="tipoProduto" class="form-control">
<?php
$tipos = array("Produto", "Livro Fisico", "Ebook");
foreach($tipos as $tipo) :
$tipoSemEspaco = str_replace(' ', '', $tipo);
$esseEhOTipo = get_class($produto) == $tipoSemEspaco;
$selecaoTipo = $esseEhOTipo ? "selected='selected'" : "";
?>
<?php if ($tipo == "Livro Fisico") : ?>
<optgroup label="Livros">
<?php endif ?>
<option value="<?=$tipoSemEspaco?>" <?=$selecaoTipo?>>
<?=$tipo?>
</option>
<?php if ($tipo == "Ebook") : ?>
</optgroup>
<?php endif ?>
<?php endforeach ?>
</select>
</td>
</tr>
<tr>
<td>ISBN (caso seja um livro)</td>
<td><input type="text" class="form-control" name="isbn" value="<?=$produto->temIsbn() ? $produto->getIsbn() : ""?>"></td>
</tr>
<tr>
<td>Taxa Impressão (caso seja um Livro Físico)</td>
<td><input type="text" class="form-control" name="taxaImpressao" value="<?=$produto->temTaxaImpressao() ? $produto->getTaxaImpressao() : ""?>"></td>
</tr>
<tr>
<td>Marca D'água (caso seja um Ebook)</td>
<td><input type="text" class="form-control" name="waterMark" value="<?=$produto->temWaterMark() ? $produto->getWaterMark() : ""?>"></td>
</tr>