Gracias Darío!
ahora bien, decidí hacer el ABM de una página personal de un amigo.
El sitio básicamente es un portal con entradas, del tipo noticia, artículo y contenido (es decir, una página estática como puede ser "mi biografía")
Ahora bien, los artículos, a diferencia de noticias y contenidos (que sólo tienen una página), pueden componerse de infinitas páginas.
Les cuento cómo es la base:
Tabla
Entradas:
id
clave primaria
tipo_id
si es noticia, articulo o contenido
categoria_id
categoría a la que perdetence
fecha
titulo
titulo_url
foto
copete
contenido
firma
impresiones
foro_url
creado_administrador_id
creado
modificado_administrador_id
modificado
destacado
activo
Tabla
Paginas:
id
clave primaria
entrada_id
entrada (de tipo artículo) a la que pertenece
orden
orden y/o número de página, ej: 1, 2, 3 y 4
titulo
contenido
Ahora bien, bajo esa estructura de tablas hice las siguientes clases:
class.entrada.php
Código PHP:
<?
abstract class entrada
{
private $id;
private $tipo_id;
private $titulo;
private $titulo_url;
private $creado_administrador_id;
private $creado;
private $modificado_administrador_id;
private $modificado;
private $activo;
/*function __construct($tipo_id, $titulo, $activo)
{
$this->tipo_id = $tipo_id;
$this->titulo = $titulo;
$this->activo = $activo;
}*/
public function guardar_entrada();
public function leer_entrada();
public function borrar_entrada();
}
?>
class.noticia.php
Código PHP:
<?
class noticia extends entrada
{
private $categoria_id;
private $fecha;
private $foto;
private $copete;
private $contenido;
private $foro_url;
private $destacado;
/*function __construct($tipo_id, $titulo, $activo)
{
$this->tipo_id = $tipo_id;
$this->titulo = $titulo;
$this->activo = $activo;
}*/
public function guardar_entrada($id = null, $tipo_id = 2, $categoria_id, $fecha, $titulo, $titulo_url, $foto, $copete, $contenido, $foro_url, $destacado, $activo)
{
if (is_null($id))
{
// Insert
}
else
{
// Update
}
}
public function leer_entrada($id)
{
// Select
}
public function borrar_entrada($id)
{
// Delete
}
}
?>
class.contenido.php
Código PHP:
<?
class contenido extends entrada
{
private $contenido;
/*function __construct($tipo_id, $titulo, $activo)
{
$this->tipo_id = $tipo_id;
$this->titulo = $titulo;
$this->activo = $activo;
}*/
public function guardar_entrada($id = null, $tipo_id = 3, $titulo, $titulo_url, $contenido, $activo)
{
if (is_null($id))
{
// Insert
}
else
{
// Update
}
}
public function leer_entrada($id)
{
// Select
}
public function borrar_entrada($id)
{
// Delete
}
}
?>
class.articulo.php
Código PHP:
<?
class articulo extends entrada
{
private $categoria_id;
private $fecha;
private $foto;
private $copete;
private $paginas; // Array con Objetos del tipo página (class.pagina.php)
private $firma;
private $foro_url;
/*function __construct($tipo_id, $titulo, $activo)
{
$this->tipo_id = $tipo_id;
$this->titulo = $titulo;
$this->activo = $activo;
}*/
public function guardar_entrada($id = null, $tipo_id = 1, $categoria_id, $fecha, $titulo, $titulo_url, $foto, $copete, $firma, $foro_url, $activo)
{
if (is_null($id))
{
// Insert
}
else
{
// Update
}
}
public function leer_entrada($id)
{
// Select
}
public function borrar_entrada($id)
{
// Delete
}
}
?>
class.pagina.php
Código PHP:
<?
class pagina
{
private $id;
private $entrada_id;
private $orden;
private $titulo;
private $contenido;
public function guardar_entrada($id = null, $entrada_id, $orden, $titulo, $contenido)
{
if (is_null($id))
{
// Insert
}
else
{
// Update
}
}
public function leer_entrada($id)
{
// Select
}
public function borrar_entrada($id)
{
// Delete
}
}
?>
como ven, la clases noticia, contenido y artículo heredan a la clase entrada, y ésta última es abstracta con los atributos básicos y los métodos comunes (que son modificar, leer y borrar)
ahora bien, quisiera que alguno que sepa al respecto me corrija esto para saber si voy por buen camino. también si tienen alguna recomendación.
y tengo una duda: los métodos que definí en la clase abstracta entrada, los podría definir como una interfaz también, no es cierto?
y en caso de definirlo como interfaz, no los debo definir en la clase abstracta?
espero sus respuestas, gracias.