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;

Sobre Reacción Estudio

Somos un estudio informático formado por jóvenes centrados en el desarrollo web, el diseño gráfico y la fotografía. Puedes solicitar presupuesto para tu proyecto a través de nuestra página web o por teléfono, pero en este blog hablaremos de todo lo que engloba el desarrollo web a día de hoy.


  • Luis

    Precisamente eso estoy haciendo, pero cuando quiero guardar algo en una varible de la clase principal como $this->color = $color; No funciona. Alguna sugerencia??

    • admin

      Si puedieras poner el código completo sería más fácil resolverte la duda.

  • http://compunita.com Ever Escoto

    No me esta funcionando el constructor… que estaré haciendo mal?

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.     ACEPTAR