Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO Duda con pasar identificador de una clase a otra

Estas en el tema de Duda con pasar identificador de una clase a otra en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola buenos días compañeros del foro quisiera exponer mi duda de “PHP OO” Se puede definir una clase conexión (mysql) con el patrón singlenton, y ...
  #1 (permalink)  
Antiguo 24/01/2013, 10:59
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Pregunta Duda con pasar identificador de una clase a otra

Hola buenos días compañeros del foro quisiera exponer mi duda de “PHP OO”
Se puede definir una clase conexión (mysql) con el patrón singlenton, y al instanciar poder pasar el identificador de conexión a otro objeto que haga uso de conexión con mysql(clase ConsultaProducto también descrita mas abajo).

Clase conexión

Código PHP:
<?php
class Conexion{  
    
    
#Propiedades
    
private $user=" ";
    private 
$host=" ";
    private 
$pass=" ";
    private 
$database=" ";
    private 
$conn;        
              private static 
$instance#Instancia única de conexión
    
   #Metodo private constructor previene creación de objetos vía new
   
private function __construct()
    {
        if(!isset(
$this->conn)){
              
$this->conn = (mysql_connect($this->host,$this->user,$this->pass)) or die(mysql_error());
             
mysql_select_db($this->database,$this->conn) or die(mysql_error());             
        }
#fin de if(!isset($this->conn))
    
}#fin de constructor
    
   #El método con patron singleton
    
public static function getInstance()
    {
        if (!isset(
self::$instance)) {
            
$c __CLASS__;
            
self::$instance = new $c;
        }
#fin de if (!isset(self::$instance))
 
        
return self::$instance;
    }
#public static function singleton()
    
    #Clone no permitido
    #Este metodo se ejecuta cuando usamos el operador clone
    
public function __clone()
    {
        
trigger_error('Clone no se permite.'E_USER_ERROR);        
    }
#fin de metodo public function __clone()
    
    
private function __destruct(){
         
mysql_close($this->conn);
        }
#fin de __destruct()
    
}#fin de class Conexión
De esta manera hago la conexión a la base de datos.

Código PHP:
  $obj1 Conexion::getInstance(); 
Y después hago la instalcia de ConsultaProducto

Código PHP:
$obj2= new ConsultaProducto(); 
Pero como le paso el identificador de conexión a ConsultaProducto para que haga uso del identificador de conexión que ya se realizo con el $obj1 ?

Clase consulta producto

Código PHP:

class ConsultaProducto{
    private 
$sql;
    private 
$resource;    
    
    
#Metodo unicamente para obtenr el string del query
    
public function setQuery($sql){
        if(empty(
$sql)){
            return 
false;
        }
#fin del if
        
$this->sql $sql;
        return 
true;
    }
#fin metodo public function setQuery()    
    
    #ejecuta lo que pasaron al metodo setQuery lo cual fue pasado a la
    #propiedad privada sql
    
public function execute(){
        if(!(
$this->resource mysql_query($this->sql/*¿como paso el identificador?*/))){
            return 
null;
        }
#fin de if(!($this->resource = mysql_query($this->sql, /*¿como paso el identificador?*/)))
        
return $this->resource;
    }
#fin metodo public function execute()    
    
    
    
public function getRows(){
        if(!(
$result=$this->execute())){
                return 
null;
            }
            
$array=array();
            while(
$row=mysql_fetch_assoc($result)){
                
$array[]=$row;
            }
            return 
$array;            
    }
#fin del 
    
    
}#fin  class ConsultaProducto 
  #2 (permalink)  
Antiguo 24/01/2013, 11:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con pasar identificador de una clase a otra

Al usar singleton puedes acceder a dicha instancia donde lo desees aśi que bien podrías recuperar la conexión dentro de tu método.

No hay necesidad de instanciar fuera de donde no se usa la conexión, no tiene sentido.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/01/2013, 12:23
 
Fecha de Ingreso: diciembre-2005
Mensajes: 201
Antigüedad: 18 años, 4 meses
Puntos: 2
Pregunta Respuesta: Duda con pasar identificador de una clase a otra

Por ejemplo en las clases que tengo como seria ?

Si en la clase conexion tengo el metodo que crea una unica instancia de conexion.
y en la clase ConsultaProducto no tengo nada que haga una conexion sin embargo
tengo metodos(msyql_query) que les falta el identificador de conexion. como puedo pasarselo en mi ejemplo?


Es correcto que quiera hacer un objeto conexion ?
La idea es que si cambio de servidor o usuario password solo cambie estos parametros en la clase conexion y los demas objetos que usen esta instancia no les tenga que hacer nada.
  #4 (permalink)  
Antiguo 24/01/2013, 12:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Duda con pasar identificador de una clase a otra

Como te dice @pateketrueke, al estar usando Singleton, tú puedes obtener la instancia donde la quieras usar.

Ahora que eso sea lo más correcto es otra cosa

Etiquetas: clase, identificador, mysql, php, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:46.