I have created some models that extend all of a ModelBase, although cos attributes are in each child, I have created a DaoBase for common operations, and inherit the different Daos, all with PDO, and now the problem. When reading a record, part of the data remains in attributes that it marks as of ModeloBase, although this has none. This is the var_dump of the read object. Observe the last fields ... that never existed in the Base.
object (models \ Image) # 6 (15) { ["image_id": "models \ Image": private] = > string (2) "27" ["image_name": "models \ Image": private] = > string (23) "2018-10-03_23h00_31.png" ["image_time": "models \ Image": private] = > string (1) "6" ["image_order": "models \ Image": private] = > string (1) "1" ["image_family": "models \ Image": private] = > string (1) "L" ["image_value": "models \ Image": private] = > string (1) "2" ["imagen_horaInicio": "modelos \ Imagen": private] = > NULL ["imagen_horaFin": "modelos \ Imagen": private] = > NULL ["image_dias": "models \ Image": private] = > string (1) "*" ["image_caduca": "models \ Image": private] = > string (19) "2019-12-02 00:00:00" ["image_lastUpdate": "models \ Image": private] = > NULL ["model": "models \ ModelBase": private] = > string (6) "Image" ["image_home"] = > string (8) "01:01:00" ["imagen_horafin"] = > string (8) "22:00:00" ["image_lastupdate"] = > string (10) "2018-12-02"
ModeloBase Class
<?php
namespace modelos;
require_once (KIOSKO_RAIZ . 'service/RutinasXml.php');
use service\RutinasXml;
abstract Class ModeloBase
{
private $modelo;
public function __construct(string $modelo){
$this->setModelo($modelo);
}
/**
* @return mixed
*/
public function getModelo()
{
return $this->modelo;
}
/**
* @param mixed $modelo
*/
public function setModelo($modelo)
{
$this->modelo = $modelo;
}
public abstract function getId():int;
public abstract function setId(int $id_valor):void;
public function getXml(): string
{
$miXML=RutinasXml::arrayToXML($this->getArray(), $this->getModelo());
return $miXML;
}
}
Class Image
<?php
declare(strict_types = 1);
namespace modelos;
use DateTime;
require_once (KIOSKO_RAIZ . 'modelos/ModeloBase.php');
class Imagen extends ModeloBase
{
private $imagen_id;
private $imagen_nombre;
private $imagen_tiempo;
private $imagen_orden;
private $imagen_pertenencia;
// G-grupo, C-cliente, L-Local
private $imagen_valor;
private $imagen_horaInicio;
private $imagen_horaFin;
// *,Lu,Ma,Mie,Ju,Vi,Sa,Do
private $imagen_dias;
private $imagen_caduca;
// Dia y hora
private $imagen_lastUpdate;
public function __construct(int $imagen_id = null, string $imagen_nombre = null, int $imagen_tiempo = null, int $imagen_orden = null, string $imagen_pertenencia = null, int $imagen_valor = null, int $imagen_horaInicio = null, int $imagen_horaFin = null, string $imagen_dias = null, int $imagen_caduca = null, int $imagen_lastUpdate = null)
{
parent::__construct("Imagen");
if (func_num_args() > 0) {
$this->setImagen_id($imagen_id);
$this->setImagen_nombre($imagen_nombre);
$this->setImagen_tiempo($imagen_tiempo);
$this->setImagen_orden($imagen_orden);
$this->setImagen_pertenencia($imagen_pertenencia);
$this->setImagen_valor($imagen_valor);
$this->setImagen_horaInicio($imagen_horaInicio);
$this->setImagen_horaFin($imagen_horaFin);
$this->setImagen_dias($imagen_dias);
$this->setImagen_caduca($imagen_caduca);
$this->setImagen_lastUpdate($imagen_lastUpdate);
}
}
.... The var_dump
public function getImagen_horaFin_String(): String
{
//echo "getHoraFin=";
var_dump($this);
if (null == $this->imagen_horaFin)
return '23:00:00';
return date(FORMATO_HORA, $this->imagen_horaFin);
}
...
DaoImagen:
function listxTipo(string $tipo,int $valor):array
{
$stmt = $this->pdo->prepare(static::SELECT_TIPO);
$stmt->bindValue(':imagen_pertenencia', $tipo);
$stmt->bindValue(':imagen_valor', $valor);
$lista = $this->acceder($stmt);
return $lista;
}
DaoBase
function acceder(PDOStatement $stmt):array
{
$stmt->setFetchMode(PDO::FETCH_CLASS , $this->modelo );
$stmt->execute();
return $stmt->fetchAll();
}