Instanciar una clase dentro de otra en PHP 5
Al empezar a programar en PHP 5 (orientado a objetos), suele surgir una pregunta, ¿cómo instancio una clase dentro de otra?. Bien, esto sucede por ejemplo, cuando tenemos una clase que sirve para conectarnos a la base de datos y realizar diferentes consultas, y queremos utilizar esta clase dentro de otra distinta. Pues vamos a poner este mismo ejemplo en práctica:
- Conexion.php
class mysql{
//iniciamos variables
//atributos para conectar la base de datos
var $servidor; //servidor donde se encuentra la base de datos
var $usuario; //nombre de usuario de la base de datos
var $password; //password de la base de datos
var $bd; //nombre de la base de datos a la que quieres acceder
//////////////////////////////////////////////////////////////////////////
var $consulta; //aquí se guarda las consultas que se realizan
var $enlace; //aquí se almacena la conexión con la bd, sí se ha producido
var $resultado; //aquí se guardan los datos que se generen de una consulta
//constructor, donde se inicializan las variables
function conectarMySQL() {
$this->servidor = "localhost";
$this->usuario = "root";
$this->password = "root";
$this->bd = "base_de_datos";
}
//conectamos con la base de datos
function conectar() {
//se realiza la conexión a la base de datos
if($this->enlace=mysql_connect($this->servidor,$this->usuario,$this->password)) {
//se intenta acceder a la base de datos que deseeamos
if(mysql_select_db($this->bd,$this->enlace)) {
//Sí es correcta muestra mensaje (sí quieres lo quitas, sólo sirve para ver si funciona).
return true;
} else {
//Si falla muestra el mensaje que el error está al acceder a la base de datos
echo "No se ha podido seleccionar la BD";
}
} else {
//Si falla la conexión con la base de datos se muestra el mensaje
echo "No se ha podido conectar a la bd";
}
}
//function consultas a la bd
function consultar($query) {
//aquí se realizan las consultas a la base de datos
$sql = $this->consulta=mysql_query($query,$this->enlace);
return $sql;
}
//obtener resultados de la consulta
function obtener_consulta() {
//aquí se obtienen los datos de la consulta
$this->resultado=mysql_fetch_array($this->consulta);
return $this->resultado;
}
//cerramos la conexión con la base de datos
function desconectar() {
mysql_close($this->enlace);
}
}
- coches.php
En la clase «coches«, vamos a instanciar la clase mysql para poder utilizarla:
include("conexion.php");
class coche{
//creamos la variable donde se instanciará la clase "mysql"
public $mysql;
//Constructor de la clase
function coche(){
//inicializamos la clase para conectarnos a la bd
$this->mysql = new mysql(); //instanciamos la clase
$this->mysql->conectar(); //nos conectamos a la base de datos
}
function mostrar(){ //un ejemplo de una consulta a la base de datos
$consulta = $this->mysql->consultar("SELECT * FROM coches");
if($consulta == true){
while($row=$this->mysql->obtener_consulta()){
echo $row['nombre']." - ".$row['marca']."<br />";
}
}else{
echo "error consulta";
}
$this->mysql->desconectar();
}
}
Como podéis ver, para utilizar la clase instanciada, hacemos lo siguiente:
$this->mysql->metodo_de_la_clase();
Donde mysql es la variable que creamos al principio de la clase:
//creamos la variable donde se instanciará la clase "mysql" public $mysql;