Blog Reacción Estudio

¡Tu zona de aprendizaje!

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;