Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/08/2005, 10:37
$thisone
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 9 meses
Puntos: 0
Pasar objeto como parametros a otras clases.

Me explico en el código mejor...
class.db.php
Código PHP:
<?php
class DB
{
    var 
$Conexion//variable de conexión
    
var $Consulta//variable de consulta

    
function DB() //constructor
    
{
        
$this->Conexion false;
        
$this->Consulta false;
    }

    function 
Conectar($host=_DB_HOST$user=_DB_USER$pass=_DB_PASS$db=_DB_NAME//conectar a la db
    
{
        if(empty(
$this->Conexion))
        {
            
$this->Conexion mysql_connect($host$user$pass);
            if(!
$this->Conexion)
                
trigger_error('No puede establecerse una conexión con el servidor que alberga la base de datos.'E_USER_ERROR);

            if(!
mysql_select_db($db$this->Conexion))
                
trigger_error('No puede establecerse una conexión con la base de datos.'E_USER_ERROR);
        }
        return 
$this->Conexion;
    }

    function 
Consultar($sql//realizar una consulta a la db
    
{
        if(isset(
$this->Conexion))
            
$this->Consulta mysql_query($sql$this->Conexion);

        return 
$this->Consulta;
    }

    
//mas metodos por aki
    //....
}
?>
class.user.php
Código PHP:
<?php
class User
{
    function 
User() //constructor
    
{
        
//O_O
    
}

    function 
setNewUser($user$pass$email//crear nuevo usuario
    
{
        
//valido los datos etc, etc...

        
$this->Consultar("SELECT user,email FROM "._DB_PREFIX."users WHERE user='".$user."' OR email='".$email."'");
        if(
$this->getNumRows() == 0)
        {
            if(!
$this->Consultar("INSERT INTO "._DB_PREFIX."users (user, pass, email) VALUES ('".$user."', '".$pass."', '".$email."')"))
                
trigger_error('No se ha podido crear el usuario por un error inesperado.'E_USER_ERROR);
            else
                return 
true;
        }else
            
trigger_error('No puede registrarse con ese nick/email.'E_USER_ERROR);
    }

    
//mas métodos, etc, etc...
}
?>
Lo que quiero conseguir es no tener que heredar en User la clase DB. Por que como tengo más clases que usan la base de datos quiero conseguir crear un solo objeto para manejar la base de datos y este "pasárselo" como parámetro(o de otra forma que no sea extendiendo) a las demás clases.

Me explico con un ejemplo.
Un ejemplo para crear un usuario nuevo(como yo quiero hacerlo).

Código PHP:
<?php
session_start
();
require_once(
'./config.php');

include_once(
'clases/class.db.php');
include_once(
'clases/class.user.php');
###

if(isset($_POST['registrar']))
{
    
$DB = new DB;
    
$DB->Conectar();
    
$User = new User($DB);//AKI ESTA EL PROBLEMA!!! NO SE COMO HACER ESTO!!!
    
if($User->setNewUser($_POST['user'], $_POST['pass'], $_POST['email']))
        
trigger_error('El usuario se ha registrado con éxito.'E_USER_NOTICE);

    
/* Si la clase User fuera extendida de DB y aki quiera hacer algo mas con otra clase y la base de datos, tendría que abrir otra conexion y crear otro objeto para manejar la db  y eso es lo que no quiero xD */

    
$DB->Liberar();//estan declarados en class.db.php
    
$DB->Desconectar();
}
//por aki el formulario etc, etc...
?>
Logicamente tendría que modificar el constructor de User para que "coja" ese objeto.
He probado creando dos metodos en la clase DB que devuelvan las variables de consulta y pasarselo a User como parametroa al crear el objeto pero entonces Consulta no estaba definida en User y no podía ser.


Gracias por leerme, espero haberme explicado con claridad. Y siento que sea tan extensa la explicación ;)