Foros del Web » Programando para Internet » PHP »

Clases

Estas en el tema de Clases en el foro de PHP en Foros del Web. A ver pues, estoy empezando con un proyecto de la escuela y es OO. Que tal ven lo que llevo, creen que deba agregar /quitar ...
  #1 (permalink)  
Antiguo 27/03/2003, 01:42
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 16 años
Puntos: 1
Clases

A ver pues, estoy empezando con un proyecto de la escuela y es OO. Que tal ven lo que llevo, creen que deba agregar /quitar / modificar algo?

Código PHP:
<?
$SERVIDOR
="developer_pc";
$BASE="comunidadguru";
$USUARIO="root";
$PASSWORD="******";

/*******************************
***  CLASE QUE REALIZA EL    ***
***     MANEJO DE LA BASE DE    ***
***  DATOS 27/03/2002        ***
*******************************/

class manejaDB{
    var 
$_servidor;
    var 
$_base;
    var 
$_usuario;
    var 
$_password;
    var 
$_conexion;
    var 
$_abrirBase;
    var 
$_sql;
    var    
$_query;

    function 
manejaDB($servidor$base$usuario$password){
        
$this->_servidor=$servidor;
        
$this->_base=$base;
        
$this->_usuario=$usuario;
        
$this->_password=$password;
    }
// Termina constructor()
    
    
function conecta(){
        if(
$this->_conexion=mysql_connect($this->_servidor,$this->_usuario,$this->_password)){
            return 
true;
        }
        else{
            return 
false;
        }
    }
// Termina conecta()
    
    
function abrirBase(){
        if(
$this->_abrirBase=mysql_select_db($this->_base,$this->_conexion)){
            return 
true;
        }
        else{
            return 
false;
        }

    }
// Termina abrirBase()
    
    
function query(){
        if(
$this->_query=mysql_query(func_get_arg(0)))
            return 
true;
        else
            return 
false;
    }
// Termina query()
        
    
function insert(){
        
$this->_sql="INSERT INTO ".func_get_arg(0)." (".func_get_arg(1).") VALUES(".func_get_arg(2).")" ;
    }
//Termina insert()
}

$objeto= new manejaDB($SERVIDOR$BASE$USUARIO$PASSWORD);
$objeto->conecta();
$objeto->abrirBase();
$objeto->insert("logueo","logueoClave,logueoEmail,logueoPassword,logueoStatus","0,'[email protected]','---','A'");
if(
$objeto->query($objeto->_sql)){
    echo 
"Todo ha ido bien";
}
else
{
    echo 
"No todo fue bien "mysql_error().""$objeto->_sql;
}
?>

Última edición por urjose; 27/03/2003 a las 11:47
  #2 (permalink)  
Antiguo 27/03/2003, 02:40
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Bueno, ya que te has puesto a hacer una clase de acceso a bbdd podrias hacerla abstracta con DBX, um..... podrias añadirle mas funciones etc etc, por lo demas tiene buena pinta :)
__________________
Usuario registrado de Linux #288725
  #3 (permalink)  
Antiguo 27/03/2003, 02:43
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 16 años
Puntos: 1
De hecho no pretendo que sea una clase tipo webstudio o algo como phpclasses, mas bien es solo para manejar mi proyecto, tambien se que faltan métodos. Y bueno deja busco eso de "abstract con DBX" por que no entendi ni mais. Ahora vuelvo

Ya volví. Por lo que investigue aquí:

http://www.php.net/manual/es/ref.dbx.php

Son como funciones "genericas" para manejar cualquiero DBMS. Taria chido pero weno lo actual me es suficiente para el proyecto .

Última edición por urjose; 27/03/2003 a las 02:49
  #4 (permalink)  
Antiguo 27/03/2003, 06:13
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Yo toy haciendo GDatabase, un asistente de bbdds que se basa en DBX, dentro de poco en zonaphp se publicara un articulo sobre como usar DBX, un modulo muy util
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 27/03/2003, 08:11
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
Muejejejejejeje.. a mi juego me llamaron

Bueno urjosé, felicitaciones por pasarte al lado OO de la fuerza. La clase obviamente la estuve mirando y si bien para ser un comienzo no está nada mal, podría si estar un poco mejor. Aquí van mis comentarios al respecto, que espero te sirvan :

1) Parámetros por "defecto". Generalmente los valores por "defecto" que puede utilizar una Clase al momento de instanciarse, se colocan como valores predefinidos de los "miembros" de la clase. Luego, en el constructor, se les puede sobreeescribir si hay algunos que no se desean utilizar. Uno de los consejos que la experiencia me dijo, es que lo mejor para instanciar y pasar parámetros a un objeto, es hacerlo mediante un array asociativo con ciertos valores o en su defecto, utilizar un nuevo objeto Settings ( que te lo creas vos, a tu gusto ) si es que realmente querés hacer todo 100% OOP.

Ejemplo con Array
Código PHP:
<?
class miObjeto
{
    var 
$miembro1 "valor por defecto";
    var 
$miembro2 3;

    function 
miObjeto$param )
    {
        
$this->miembro1 = !$param["miembro1"]?$this->miembro1:$param["miembro1"];
    }
}
?>
En el ejemplo puedes ver como pasando un array con un id asociativo "miembro1" el objeto busca si tiene un valor y se lo asigna al miembro. Y verás como miembro2 no tiene esta caracteristica, por lo que te aseguras de que al momento de instanciar, algunos miembros no puedan cambiarse.

Ejemplo con Objeto Settings
Código PHP:
<?
class Settings
{
    var 
$user "webstudio";
    var 
$pass "********";
    var 
$host "localhost";
}

class 
miObjeto
{
    var 
$miembro1;
    var 
$miembro2;

    function 
miObjeto()
    {
        
$set = new Settings;
        
$this->miembro1 $set->user;
        
$this->miembro2 $set->pass;
    }
}
?>
En este ejemplo, tambien puedes hacer orta cosa, dependiendo de la cantidad de objetos que utilicen a Settings, y es instanciar solo 1 vez a Settings en el curso normal de tu script y pasar el objeto Settings por referencia a los constructores. Eso queda a tu gusto.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 27/03/2003, 08:27
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
2) Facilidad de uso y Abstracción. Así como está planteada tu clase, el objeto instanciado no es más que una "libreria de funciones" que no se desempeña mucho como un Objeto Abstracto. cuando vas a programar Orientado a Objetos, antes que nada, hay que pensar en la "interfase" que el objeto va a tener con el mundo exterior, los servicios que va a proporcionar. Por eso, te recomiendo que los métodos no sean tantos para obtener un mismo resultado. Por ejemplo, el método "insert" no tiene mucho sentido si después no se hace un "query"... porqué separar las funcionalidades entonces? O directamente haces un método Query que tome como parámetro un Query completo o sino, haces que el método Insert llame automáticamente a Query luego de tomar el parámetro. Otra cosa que podrías cambiar, a modo de sencillez en la programación del usuario de tu clase, es que la conexión y la selección de la base de datos, se haga en el Constructor, ya que si instancias un Objeto de Manejo de BBDD, entonces es casi seguro que te querrás conectar, no ? Esas cosas son las que ahorran tiempo luego al usuario de la clase y ayudan a una más rápida programación.

3) Toma de parámetros en las funciones. Veo que estás utilizando func_get_args(); en tus métodos, cuando no es para nada necesario. func_get_args(); te puede servir cuando no sabes ( o prefieres no saber ) la cantidad de parámetros que recibe un método, como para simular el Polimorfismo por cantidad de parámetros. Pero en tu caso, si que sabes cuántos parámetros necesitas, o 1 o 2 o 3. Entonces, en esos casos, te recomiendo que utilices los nombres de los parámetros en tus métodos, ya que no solo ahorrarás en performance sino que también en claridad, ya que queda mucho más claro un parámetro $query que un func_get_args(0);

4) Errores en los métodos. Una buena práctica, sobre todo en la programación orientada a objetos, es que las funciones al fallar, retornen False, de esa manera se puede validar el correcto funcionamiento o la falla en la ejecución. Lo bueno que tiene la programación orientada a objetos, es que puedes tener un miembro en tu clase que sirva para guardar el último error generado y que sirva para hacer debug de tu aplicación. Este es un caso que me ha servido mucho :

Código PHP:
<?
var $error "";

function 
error()
{
    switch(
func_num_args())
    {
        case 
0: return $this->error;
        case 
1$this->error func_get_args(0);
    }
}

function 
query($query)
{
    if(empty(
$query))
    {
        
$this->error("El query está vacío");
        return 
false;
    }
}
?>
De esta manera, al retornar el método query Falso por haber fallado, tan solo puedes hacer un echo $obj->error(); y te mostrará el motivo del fallo ( pudiendo tener varios motivos de fallo un solo metodo ).
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #7 (permalink)  
Antiguo 27/03/2003, 08:40
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
5) Documentación. Quizás no sea tu caso, pero siempre es recomendable que el mismo código del Objeto sea la documentación básica y necesaria del mismo. Lo más util que se puede hacer, es en la cabecera de cada función, colocar una pequeña descripción de lo que el método hace, los parámetros que recibe y los valores que devuelve. Para hacer esto, ya hay un "standar" definido que es la sintaxos PHPDoc, heredada del JavaDoc, que permite a ciertos "Parsers" recorrer el código fuente y generar solos las páginas de documentación de las clases. Si revisas unos mensajes atrás en el foro.. creo haber leido que discutian de ello.

6) Accessors. Uno de los primeros requerimientos de la programación orientada a Objetos, es que se garantice el Encapsulamiento de los datos del objeto. Esto se "rompe" cuando se acceden directamente a los datos del objeto con sus variables, como veo que haces con $obj->_sql. Recuerda, que siempre siempre que quieras acceder a los datos del objeto, tienes que hacerlo por un acccessor (un método encargado de devolver datos o setearlos dentro del objeto). Un ejemplo de esto es el método "error" del ejemplo anterior. Este método es un accesor para el miembro "error", ya que el método indistintamente le asigna o devuelve el valor de ese miembro. Esto es útil para garantizarte de que ningún objeto tenga la necesidad de saber de que manera internamente TU objeto trabaja. Los demás objetos solo necesitan saber que el método retornaSQL(); devuelve el SQL Interno del objeto en formato String, sin importarles si tu objeto internamente lo guarda como string o si lo tiene dividido en varios miembros o si lo genera al vuelo. Comprendes?

Bueno, sin querer ahondar más, esas son las impresiones que tengo sobre el código que pusiste y que si quieres, puedes mejorar. Cualquier cosa, te recomiendo que leas el maravilloso artículo sobre POO en PHP que escribió Luis Argerich y que tenemos en http://www.zonaphp.com .

Saludos
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #8 (permalink)  
Antiguo 27/03/2003, 10:39
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 16 años
Puntos: 1
Webstudio: Aún no leo todo lo que pusiste... tan mal esta...

Deja empiezo a leer.

Despues de leer:

Gracias !!. De hecho algunas cosas ya las habia considerado, otras no, y las que ya habia considerado eran cosas que habias puesto en otros mensajes que hablan sobre POO.

Nada más una duda del último punto...

Para los metodos de acceso a atributos, lo malo es que en PHP no puedes ponerle modificadores de acceso a los atributos. Aun así lo cambiare.

Pero que atributos deben tener dichos métodos set y get?

Gracias !!!

Última edición por urjose; 27/03/2003 a las 10:51
  #9 (permalink)  
Antiguo 27/03/2003, 11:08
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
en general, debes tener accessors para los miembros de la clase que sean necesarios intercambiar con otros objetos, o que necesites setear luego de instanciada la clase.
Para el resto, o sea, para los miembros privados que solo le interesan internamente al objeto y que solo serán modiicador por el objeto, no hacen falta ni Set's ni Get's, tan solo los $this->miembro dentro del objeto y listo.

En tu caso, que quieres devolver el query generado, deberías hacerle un accessor para el miembro _query, pero dentro de tu objeto, manipulalo con $this->_query sin problemas.

Saludos. !
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #10 (permalink)  
Antiguo 27/03/2003, 11:45
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 16 años
Puntos: 1
Las primeras modificaciones...

Bueno ahora no funca...

Código PHP:
<?
$SERVIDOR
="developer_pc";
$BASE="comunidadguru";
$USUARIO="root";
$PASSWORD="---";

/*******************************
***  CLASE QUE REALIZA EL    ***
***     MANEJO DE LA BASE DE    ***
***  DATOS 27/03/2002        ***
*******************************/

class manejaDB{
    var 
$_servidor;
    var 
$_base;
    var 
$_usuario;
    var 
$_password;
    var 
$_conexion;
    var 
$_abrirBase;
    var    
$_query;
    var    
$_error;

    function 
manejaDB($servidor$base$usuario$password){
        
$this->_servidor=$servidor;
        
$this->_base=$base;
        
$this->_usuario=$usuario;
        
$this->_password=$password;
        if(
$this->_conexion=mysql_connect($this->_servidor,$this->_usuario,$this->_password)){
            return 
true;
        }
        else{
            
$this->error(" *** NO SE PUDO CONECTAR AL SERVIDOR *** ");
            return 
false;
        }
        if(
$this->_abrirBase=mysql_select_db($this->_base,$this->_conexion)){
            return 
true;
        }
        else{
            
$this->error(" *** NO SE PUDO ABRIR LA BASE DE DATOS *** ");
            return 
false;
        }
    }
// Termina constructor()
    

    
function error()
    {
        switch(
func_num_args())
        {
            case 
0: return $this->_error;
            case 
1$this->_error func_get_arg(0);
        }
    }
// Termina error()
    
    
function query($sql){
        if(
$this->_query=mysql_query($sql,$this->_conexion))
            return 
true;
        else
            
$this->error(" *** NO SE PUDO EJECUTAR LA QUERY *** "mysql_error(). mysql_errno());
            return 
false;
    }
// Termina query()
}

$objeto= new manejaDB($SERVIDOR$BASE$USUARIO$PASSWORD);
if(
$objeto->query("INSERT INTO logueo(logueoClave,logueoEmail,logueoPassword,logueoStatus) VALUES(0,'[email protected]','***','A')")){
    echo 
"Todo ha ido bien";
}
else
{
    echo 
$objeto->error();
}
?>
La verdad es que no veo el error y lo que me dice es: "*** NO SE PUDO EJECUTAR LA QUERY *** No Database Selected1046".

Alguien ve el error
  #11 (permalink)  
Antiguo 27/03/2003, 12:22
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
Yo lo intentaría de esta manera, pruebalo y me cuentas:

Código PHP:
<?
$SERVIDOR
="developer_pc";
$BASE="comunidadguru";
$USUARIO="root";
$PASSWORD="---";

/*******************************
***  CLASE QUE REALIZA EL    ***
***     MANEJO DE LA BASE DE    ***
***  DATOS 27/03/2002        ***
*******************************/

class manejaDB
{
    var 
$_servidor;
    var 
$_base;
    var 
$_usuario;
    var 
$_password;
    var 
$_conexion;
    var 
$_abrirBase;
    var 
$_query;
    var 
$_error;

    function 
manejaDB($servidor$base$usuario$password)
    {
        
$this->_servidor $servidor;
        
$this->_base $base;
        
$this->_usuario $usuario;
        
$this->_password $password;

        if(
$this->conectar()) return $this->abrirBase();

    }
// Termina constructor()

    
function conectar()
    {
        if(
$this->_conexion=mysql_connect($this->_servidor,$this->_usuario,$this->_password)){
            return 
true;
        }
        else{
            
$this->error(" *** NO SE PUDO CONECTAR AL SERVIDOR *** ");
            return 
false;
        }

    }

    function 
abrirBase()
    {
        if(
$this->_abrirBase=mysql_select_db($this->_base,$this->_conexion)){
            return 
true;
        }
        else{
            
$this->error(" *** NO SE PUDO ABRIR LA BASE DE DATOS *** ");
            return 
false;
        }

    }

    function 
error()
    {
        switch(
func_num_args())
        {
            case 
0: return $this->_error;
            case 
1$this->_error func_get_arg(0);
        }
    }
// Termina error()


    
function query($sql){

        if(
$this->_query=mysql_query($sql,$this->_conexion))
            return 
true;
        else
        {
            
$this->error(" *** NO SE PUDO EJECUTAR LA QUERY *** "mysql_error()." *** "mysql_errno());
            return 
false;
        }
    }
// Termina query()
}

if(!(
$objeto= new manejaDB($SERVIDOR$BASE$USUARIO$PASSWORD)))
    echo 
$objeto->error();
if(
$objeto->query("INSERT INTO logueo(logueoClave,logueoEmail,logueoPassword,logueoStatus) VALUES(0,'[email protected]','***','A')"))
{
    echo 
"Todo ha ido bien";
}
else
{
    echo 
$objeto->error();
}
?>
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #12 (permalink)  
Antiguo 27/03/2003, 12:27
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 16 años
Puntos: 1
Pues así si funca aunque me quede con la duda de porque no funcionaba y creo que ya se por que, habra sido por los return que estaban dentro del constructor o algo asi no?

BUeno Gracias !!

Agregando:

Segun tengo entendi los constructores unicamente se utilizan para inicializar variables así que modifique así

Código PHP:
    function manejaDB($servidor$base$usuario$password)
    {
        
$this->_servidor $servidor;
        
$this->_base $base;
        
$this->_usuario $usuario;
        
$this->_password $password;
        if (
$this->conectar()) 
            
$this->abrirBase();

    }
// Termina constructor() 

Última edición por urjose; 27/03/2003 a las 13:54
  #13 (permalink)  
Antiguo 27/03/2003, 15:49
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Tienes razon, tu problema eran los return. Los ponias tanto en la rama verdadera como en la falsa de los if, por lo que solo ejecutaba el primer if. Lo puedes ver claramente si haces el diagrama de flujo.

Y ahora lanzo una idea. ¿Que os parece usar la funcion trigger_error() para generar el mensaje de error? Asi incluso se podria "simular" las excepciones creando un manejador de errores. Ademas, asi controlariamos la visualizacion del mensaje con la configuracion de PHP, no con codigo.

Solo mis 2 centimos de euro.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #14 (permalink)  
Antiguo 27/03/2003, 16:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Estaría bien lo que propones josemi .. así ademas de controlarlo por error_reporting() ..

¿Podría caer el error (el msg) en un log si activamos el log de errores de PHP (ahora no me acuerdo la directiva ..)? ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 27/03/2003, 21:12
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 16 años
Puntos: 1
Y que estructura tendría ese "manejador de errores" ando en eso de las abstracciones a penas empezando
  #16 (permalink)  
Antiguo 27/03/2003, 21:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sería lo mismo que haces actualmente .. pero en lugar de usar "echo" llamando a tu metodo error() mm sería cosa de usar ahí mismo la función (el método sería privado .. sin que devuelva nada)

trigger_error($this->_error, ERROR);

Lo bueno que tiene manejar el trigger este es que ante un error .. ademas de personalizarlo como nos de la gana (usando a su vez si es necesario: set_error_handler() ..) Nos indicará la "linea" donde hay el error .. osese .. como un error comun de PHP. Esto tal vez no es bueno usarlo en "producción" .. pero si en fase de desarrollo .. tal vez un método nuevo para declarar "modo debugg" o modo "errores básicos" .. estaría bien xDD.

mas info:
http://www.php.net/manual/en/function.trigger-error.php

Un saludo,

pd: (si me equivoco disculpen jeje tampoco llevo mucho time() con OOP xD)
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 27/03/2003, 23:19
Avatar de urjose  
Fecha de Ingreso: diciembre-2001
Mensajes: 5.286
Antigüedad: 16 años
Puntos: 1
Vale

A ver ahora:

En la clase Paginado de Webstudio hay algo así:

Código PHP:
        if(!$this->rsmysql_query($query$this->conn()) )) 
        { 
            
$this->error("Ocurrió un error al ejecutar el query \"$query\". La base dijo : ".mysql_error()); 
            return 
false
        }
// Fin If 
mecesito que en vez de eso sea algo así

Código PHP:
        if(!$this->rs$manejaDb->query($query) )) 
        { 
            
$this->error("Ocurrió un error al ejecutar el query \"$query\". La base dijo : ".mysql_error()); 
            return 
false
        }
// Fin If 
Pero me dice:
"Fatal error: Call to a member function on a non-object in d:\inetpub\wwwroot\sitiosweb\clases\class.paginado .php on line 354"

Teniendo en cuenta que:

Código PHP:
<?
include("clases/manejaDB.php");
if (!
$manejaDb= new manejaDB($SERVIDOR$BASE$USUARIO$PASSWORD)) {
    echo 
$manejaDb->getError();
} else {
    include(
"clases/class.paginado.php");
    
$pagina $HTTP_GET_VARS["pagina"];
    
$rs = new paginado($manejaDb->getConexion());
    
$rs->pagina($pagina);
    
$rs->porPagina(10);
    
$rs->propagar("forum");
    if(!
$rs->query("SELECT * FROM logueo")){
        
header("Location: mensajes.php");
    } else {
        echo 
"Mostrando ".$rs->desde()." - ".$rs->hasta()." de un total de ".$rs->total()."<br>";
        while (
$row $rs->obtenerArray())
        {
            echo 
$row["logueoClave"].", ".$row["logueoEmail"]."<br>";    
            echo 
"Password : ".$row["logueoPassword"];
            echo 
"<hr>";
        }
        echo 
$rs->anterior()." - ".$rs->nroPaginas()." - ".$rs->siguiente();
    }
}
?>
Pero... me manda errores de que el objeto no esta instanciado o cosas así

Editando: La pregunta sería como utilizo un objeto dentro de una clase?

Se debe poder no? si no como comunico los dos objetos?

Última edición por urjose; 27/03/2003 a las 23:28
  #18 (permalink)  
Antiguo 28/03/2003, 08:25
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
El problema está en que tu método "query" retorna true o false, mientras que el método "rs" de mi clase, espera un ResultSet de mySQL ( o en su defecto de otra BD ).
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #19 (permalink)  
Antiguo 28/03/2003, 08:29
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
Cita:
Mensaje Original por urjose
Pues así si funca aunque me quede con la duda de porque no funcionaba y creo que ya se por que, habra sido por los return que estaban dentro del constructor o algo asi no?

BUeno Gracias !!

Agregando:

Segun tengo entendi los constructores unicamente se utilizan para inicializar variables así que modifique así

Código PHP:
    function manejaDB($servidor$base$usuario$password)
    {
        
$this->_servidor $servidor;
        
$this->_base $base;
        
$this->_usuario $usuario;
        
$this->_password $password;
        if (
$this->conectar()) 
            
$this->abrirBase();

    }
// Termina constructor() 
Ok, tu modificacion es válida, pero yo puse el return por 1 simple motivo. Que sucede si falla la selección de la base de datos?
Nunca te enterarias, salvo que el constructor devuelva false.

Vamos a partir por el medio, ok? podríamos sacar del constructor el método "conectar", y que conectar (que tendrá que ser llamado como un metodo ) incluya abrirBase();
Ok ?
Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
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:01.