Domingo, 21 de Febrero del 2010 [3]
Active Record y PHP
Del autor: Los ejemplos que ire añadiendo no seran nada enrevesados, estaran mas orientados a dar una demostracion de como usar el active record con php aplicando las caracteristicas de la POO.
Definicion de Active Record
"En ingeniería informática, el patrón active record es un patrón de diseño que se suele dar en las aplicaciones empresariales. Active Record es un enfoque al problema de acceder a los datos de una base de datos. Una fila en la tabla de la base de datos (o vista) se envuelve en una clase, de manera que se asocian filas únicas de la base de datos con objetos del lenguaje de programación usado." [
Wikipedia (Consultado el 21 Febrero 2010)]
1) Primero creamos la Base de datos y la tabla usuario:CREATE DATABASE `web` ;
CREATE TABLE `usuario` (
`id` int(11) NOT NULL auto_increment,
`nombres` varchar(30) default NULL,
`apellidos` varchar(30) NOT NULL,
`sexo` int(11) NOT NULL,
) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
2) Ahora creamos el sitio ("htpdocs/www/active" - all files here) y la clase para la conexion:
Clase para la conexion: (conexion.php)class Conexion
{
private $_CON;
function __construct()
{
$conex = array('localhost','root','miclaveROOT','web'); }
public function conex()
{
return $this->_CON;
}
}
3) Creamos la clase ActiveRecord (Buscar y guardar)
Clase para active Record: (activerecord.php)//Clase demostrativa elaborada por Baaaw Oic ºº Active Record..
include("conexion.php");
class Active
{
function error_handler()
{
die("Ups ... un error ha ocurrido."); return true;
}
public function busca($codigo)
{
$campos = $this->campos($tabla);
$sentencia = "select * from $tabla where $campos[0]='$codigo'";
$arreglo = $this->sentencia($sentencia);
if($numero>0)
{
$this->definevalores($tabla,$arreglo);
return 1;
}else{ return 0; }
}
public function guarda()
{
$campos = $this->campos($tabla,true);
for($i=0;$i<$tamanio;$i++)
{
$elemento = split("-",$campos[$i]); if($elemento[2]=='NO' and
strlen($this->$elemento[0])==0 and
$i>0){ return 0; } else{ $valores[] = $this->$elemento[0]; }
}
$campos = $this->campos($tabla);
$consulta = "insert into $tabla (".implode(",",$campos).") values ('".implode("','",$valores)."')"; $arreglo = $this->sentencia($consulta);
return 1;
}
private function sentencia($query)
{
$con = new Conexion();
if($sentencia){ return $sentencia;}
else
{
return false;
}
}
private function definevalores($tabla,$arreglo)
{
$campos = $this->campos($tabla);
foreach($campos as $valor)
{
$this->$valor = $contenido[$valor];
}
}
private function campos($tabla,$detalles=false)
{
$sentencia = "show columns from $tabla";
$consulta = $this->sentencia($sentencia);
{
$parametro = $arreglo[0];
if($detalles==true)
{
for($i=1;$i<$numero;$i++)
{
$parametro = $parametro . "-" . $arreglo[$i];
}
}
$columnas[] = $parametro;
}
return $columnas;
}
}
4) Creamos la clase que representara a la tabla usuario de la BDObjeto que representa al usuario: (usuario.php)include("activerecord.php");
class Usuario extends Active
{
private $id;
private $nombres;
private $apellidos;
private $sexo;
public function __set($var, $val){
$this->$var = $val;
}
public function __get($var){
return $this->$var;
}
}
5) Index y funcionamiento (index.php)Ejemplo guardando registro<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Ejemplo</title>
</head>
<body>
<?
include("usuario.php");
$usu = new Usuario();
//el ide es autogenerado por lo tanto no es necesario definirlo
$usu->nombres='Jose Francisco';
$usu->apellidos='El mejor';
$usu->sexo=1;
$usu->guarda();
?>
</body>
</html>
Ejemplo buscando registro<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Documento sin título</title>
</head>
<body>
<?
include("usuario.php");
$usu = new Usuario();
$usu->busca(1);
echo $usu->apellidos;
?>
</body>
</html>
Caracteristicas usadas en el ejemplo:* Encapsulamiento.
* Abstraccion
* Reutilizacion
Pronto estare renovando esta sección, muchos saludos y espero verlos pronto.
Saludos. Espero MP's con sugerencias. xD