Tengo el siguiente esquema, tengo 3 clases, la clase A es la encargada de hacer la conexion a la db asi como los select, insert, etc, la clase B se encarga de pedirle a la clase a informacion de la db, la clase C se encarga de crear objetos en html para la plantilla (vista), ok, ahora, la clase B hereda de la clase A mediante Singleton.
ahora la clase C se encarga de crear un select con información que me puede proporcionar la clase B, mi pregunta es si esta correcto que dentro de la case C instancie la clase B o si es mejor pasar esa informacion como parametro, ejemplo
clase A
Código PHP:
class IOMConnect {
//variables de configuracion
private static $instances = array();
private $conexion; //Guarda la conexion activa a mysql
public static function getInstance($class) {
if (!isset(self::$instances[$class])) {
self::$instances[$class] = new $class();
}
return self::$instances[$class];
}
public function setConexion($server,$user,$pass,$db) {
$this->conexion = mysql_connect($server,$user,$pass) or $this->getError('Error en la conexión');
mysql_select_db($db,$this->conexion);
}
private function getQuery($sql) {
$query = mysql_query($sql,$this->conexion) or $this->getError('Error en ejecutar la sentencia \''.$sql.'\'');
return $query;
}
public function getSelect($tabla,$campos,$addsql='') {
$sql = 'select ';
if (is_array($campos)) {
$sql .= implode(',',$campos);
}else {
$sql .= $campos;
}
$sql .= ' from '.$tabla;
if (!empty($addsql)) {
$sql .= ' '.$addsql;
}
return $this->getQuery($sql);
}
//la clase original incluye mas metodos
}
Código PHP:
<?php
//clase iomgalaxy
class planetas extends IOMConnect {
//variables de uso interno
public function __construct() {
$this->setConexion('localhost','iomgalaxy','','iomgalaxy');
}
public static function getInstance() {
return parent::getInstance(get_class());
}
//========================================================================
//Metodos de acceso a datos
//========================================================================
/**
* Metodo: getPlanetas
* Funcion: Recupera y envia los planetas creados de la DB
* Variable: $id integer
* $campos array
* Acceso: public
* Entrega: array
*/
public function getPlanetas($id='',$campos=array('id','planeta')) {
//verifico si se incluyo un ID
if (empty($id)) {
//Solicito los planetas a la base de datos
$planet = $this->getSelect('iomg_planet',$campos);
}else {
//Solicito el planeta indicado
$planet = $this->getSelect('iomg_planet',$campos,'where id = \''.$this->getSanitizar($id).'\'');
}
//entrego el array obtenido
return $planet;
}
/**
* Metodo: getPlanetasUsuario
* Funcion: Busca y entrega el ID de los planetas que tiene el usuario
* Variables: $id integer
* Acceso; public
* Entrega: array
*/
public function getPlanetasUsuario($id) {
//pido los planetas a cargo del ID del usuario entregado
$planetas = $this->getSelect('iomg_planet','id','where id_user = \''.$this->getSanitizar($id).'\'');
//entrego el array con los planetas
return $planetas;
}
/**
* Metodo: getPlanetaRecursos
* Funcion: Entrega información sobre los recursos del planeta
* Variables: $id integer
$recursos string
* Acceso: public
* Entrega: array
*/
public function getPlanetaRecursos($id,$recursos='all') {
//verifico si se regresaran todos los recursos o solo alguno de ellos
if ($recursos == 'all') {
//si son todos hago la consulta de los recursos
$planeta = $this->getSelect('iomg_planet',array('metal','cristal','uranio'),'where id = \''.$this->getSanitizar($id).'\'');
}else {
//si no son todos solo recupero lo necesario
$planeta = $this->getSelect('iomg_planet',$recursos,'where id = \''.$this->getSanitizar($id).'\'');
}
//entrego la información solicitada
return $planeta;
}
/**
* Metodo; getPlanetaInfo
* Funcion: Entrega información sobre el planeta solicitado
* Variables: $id integer
$campos dinamic array|string
* Acceso: public
* Entrega: array
*/
public function getPlanetaInfo($id,$campos='*') {
//obtengo la información del planeta solicitado
$planeta = $this->getSelect('iomg_planet',$campos,'where id = \''.$this->getSanitizar($id).'\'');
//entrego la info
return $planeta;
}
}
?>
Código PHP:
<?php
//clase iomgalaxy
class html extends IOMConnect {
//variables de uso interno
private $obj_planetas; //guarda el objeto planetas
public function __construct() {
$this->setConexion('localhost','iomgalaxy','','iomgalaxy');
$this->obj_planetas = planetas::getInstance(); //Aqui inicio la clase B
}
public static function getInstance() {
return parent::getInstance(get_class());
}
/**
* Metodo: getSelectPlanet
* Funcion: Crea un select con la información de los planetas
* Variables: $id integer
* Acceso: public
* Entrega: string
*/
public function getSelectPlanet($id) { //obtengo los planetas
$planetas = $this->obj_planetas->getPlanetasUsuario($id); //Aqui es donde obtengo información de la clase B
//creo el contenedor y agrego los primeros valores del select
$html = '<form name="form" id="form"><select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu(\'parent\',this,0)">';
//recorro el array y guardo el valor en $html
while($row=$this->getFetchAssoc($planetas)) {
$planeta = $this->obj_planetas->getPlanetaInfo($row["id"],array('id','planeta')); //Y aqui de nuevo obtengo información de la clase B
$rew = $this->getFetchAssoc($planeta);
$html .= '<option value="planel.php?planet='.$rew["id"].'">'.$rew["planeta"].'</option>';
}
//ingreso lo final
$html .= '</select><input type="submit" name="button" id="button" value="Ir" /></form>';
//finalemnte entrego todo finalizado
return $html;
}
}
?>