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;