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 ;)