Las clases en PHP

Las Clases son máximo exponente de la Programación Orientada a Objetos (POO). PHP no es un lenguaje orientad a objeto, pero implementa las características que permiten definir las clases.

Pero, ¿qué son las Clases y para que sirven?, empecemos por los segundo, sirven hacer el código más legible, y lo que es más importante, reutilizable. Escribir una Clase es sin duda más largo que escribir el código directamente, pero a la larga es más rentable por su portabilidad a otras aplicaciones y su mantenimiento.

Las Clases no son más que una serie de variables y funciones que describen y actúan sobre algo. Por ejemplo, vamos a crear la clase automóvil, la cual tendrá diversas variables, $color, $modelo, $marca, $potencia, $matricula y habrá una serie de funciones que actuarán sobre la clase automóvil como Precio(), Acelerar(), Frenar(), Girar()y Reparar().

Como ejemplo vamos a crear la clase mysql, que nos servirá para realizar consultas a las bases de datos MySQL.

<?php

class DB_mysql {

/* variables de conexión */

var $BaseDatos;

var $Servidor;

var $Usuario;

var $Clave;

/* identificador de conexión y consulta */

var $Conexion_ID = 0;

var $Consulta_ID = 0;

/* número de error y texto error */

var $Errno = 0;

var $Error = «»;

/* Método Constructor: Cada vez que creemos una variable

de esta clase, se ejecutará esta función */

function DB_mysql($bd = «», $host = «localhost», $user = «nobody», $pass = «») {

$this->BaseDatos = $bd;

$this->Servidor = $host;

$this->Usuario = $user;

$this->Clave = $pass;

}

/*Conexión a la base de datos*/

function conectar($bd, $host, $user, $pass){

if ($bd != «») $this->BaseDatos = $bd;

if ($host != «») $this->Servidor = $host;

if ($user != «») $this->Usuario = $user;

if ($pass != «») $this->Clave = $pass;

// Conectamos al servidor

$this->Conexion_ID = mysql_connect($this->Servidor, $this->Usuario, $this->Clave);

if (!$this->Conexion_ID) {

$this->Error = «Ha fallado la conexión.»;

return 0;

}

//seleccionamos la base de datos

if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) {

$this->Error = «Imposible abrir «.$this->BaseDatos ;

return 0;

}

/* Si hemos tenido éxito conectando devuelve

el identificador de la conexión, sino devuelve 0 */

return $this->Conexion_ID;

}

/* Ejecuta un consulta */

function consulta($sql = «»){

if ($sql == «») {

$this->Error = «No ha especificado una consulta SQL»;

return 0;

}

//ejecutamos la consulta

$this->Consulta_ID = @mysql_query($sql, $this->Conexion_ID);

if (!$this->Consulta_ID) {

$this->Errno = mysql_errno();

$this->Error = mysql_error();

}

/* Si hemos tenido éxito en la consulta devuelve

el identificador de la conexión, sino devuelve 0 */

return $this->Consulta_ID;

}

/* Devuelve el número de campos de una consulta */

function numcampos() {

return mysql_num_fields($this->Consulta_ID);

}

/* Devuelve el número de registros de una consulta */

function numregistros(){

return mysql_num_rows($this->Consulta_ID);

}

/* Devuelve el nombre de un campo de una consulta */

function nombrecampo($numcampo) {

return mysql_field_name($this->Consulta_ID, $numcampo);

}

/* Muestra los datos de una consulta */

function verconsulta() {

echo «<table border=1>\n»;

// mostramos los nombres de los campos

for ($i = 0; $i < $this->numcampos(); $i++){

echo «<td><b>».$this->nombrecampo($i).»</b></td>\n»;

}

echo «</tr>\n»;

// mostrarmos los registros

while ($row = mysql_fetch_row($this->Consulta_ID)) {

echo «<tr> \n»;

for ($i = 0; $i < $this->numcampos(); $i++){

echo «<td>».$row[$i].»</td>\n»;

}

echo «</tr>\n»;

}

}

} //fin de la Clse DB_mysql

?>

Como habreis observado, para crear una clase utilizamos la sentencia class, y además hemos creado una función con el mismo nombre que la clase, a esa función se le llama constructor y se ejecutará cada vez que definamos una variable de esa clase. No es obligatorio crear un constructor en una definición de clase.

Otra cosa importante en las clases es el operador ->, con el que indicamos una variable o método (parte derecha del operador) de una clase (parte izquierda del operador). Para hacer referencia a la clase que estamos creando dentro de su definición, debemos utilizar this.

Y ahora veamos un ejemplo de la clase que hemos creado, y supongamos que el código anterior lo hemos guardado en un fichero llamado clase_mysql.inc.php.

<body>

<html>

<?php

require («clase_mysql.inc.php»);

$miconexion = new DB_mysql ;

$miconexion->conectar(«mydb», «localhost», «nobody», «»);

$miconexion->consulta(«SELECT * FROM agenda»);

$miconexion->verconsulta();

?>

</body>

</html>