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

PHP OO Varias instancias a clase. Error

Estas en el tema de Varias instancias a clase. Error en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas tardes a todos: Me estoy iniciando en el maravilloso mundo del php + mysql y tengo, o un problema de concepto, un fallo tonto, ...
  #1 (permalink)  
Antiguo 09/09/2011, 11:07
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 8 años, 4 meses
Puntos: 1
Varias instancias a clase. Error

Buenas tardes a todos:

Me estoy iniciando en el maravilloso mundo del php + mysql y tengo, o un problema de concepto, un fallo tonto, o no se que. Me explico.

Estoy intentando instanciar 2 veces una clase desde un unico php y la primera me bloquea a la segunda. Pongo codigo

Código PHP:
<?php
            
include_once("class_conexion_bd.php");

             
$resultado = new class_conexion_bd();

             
$bresultado = new class_conexion_bd();
                
$bresultado->fc_sentencia_sql("select `ruta`,`nombre`,`comentario` from `imagenes`;");
                
$bbucle $bresultado->fc_realizar_consulta_srom();
                foreach (
$bbucle as $baux)
                {
                        echo (
"<br>besto es un texto " $baux->ruta);
                };

?>
Si comento la instanciación de $resultado, el funcionamiento es correcto, pero si lo descomento la página resultante es "en blanco".

He llegado a ese punto puesto que había copiado 2 veces el mismo código (modificando el nombre de las variables) y si lo pongo solo una vez, el funcionamiento perfecto, pero lo dicho, si lo descomento, resultado "en blanco".

No se puede instanciar todas las veces que se desee a una clase? porque la primera "instanciacion" me bloquea la segunda?
Nota: espero haberme explicado bien, sino comentarmelo y lo volvería a intentar.

Muchas gracias por vuestra atencion.

Un saludo
  #2 (permalink)  
Antiguo 09/09/2011, 11:17
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 10 años, 11 meses
Puntos: 89
Respuesta: Varias instancias a clase. Error

No conosco de class ni tampoco veo la que utilizas...
pero si es MySQL y PHP
esta linea:

Código PHP:
Ver original
  1. $bresultado->fc_sentencia_sql("select `ruta`,`nombre`,`comentario` from `imagenes`;");

mepa que tendria que ir de esta manera:


Código PHP:
Ver original
  1. $bresultado->fc_sentencia_sql("select `ruta`,`nombre`,`comentario` from `imagenes`");

sin el punto y com a en la consulta...
Tampoco veo en este codigo la necesidad de conectarte dos veces...
__________________
Mono programando!
twitter.com/eguimariano
  #3 (permalink)  
Antiguo 09/09/2011, 14:03
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 8 años, 4 meses
Puntos: 1
De acuerdo Respuesta: Varias instancias a clase. Error

Hola SirDuque y demás:

El punto y coma, hasta donde yo se solo interferiria en la "consulta sql", la cual se ejecuta correctamente. De cualquier forma pienso que no es lo que me "bloquea" el script puesto que en la primera instanciacion ni pongo esa línea. Además, por probar, le he quitado el punto y coma y hace lo mismo.

La clase esta construida por mi, y resumiendola sería como sigue:

Código PHP:
class class_conexion_bd
{

       function 
__construct()
        {
                include_once(
"config.php");
                
$this->vc_servidor              $servidor;
                
$this->vc_usuario               $usuario;
                
$this->vc_contrasenya           $contrasenya;
                
$this->vc_nombre_bd             $nombre_bd;

                
$this->vc_consulta_sql          null;
                ...... 
el resto de variables .....
    
                
$this->vc_conexion = @mysql_connect($this->vc_servidor$this->vc_usuario$this->vc_contrasenya);
                
mysql_select_db($this->vc_nombre_bd$this->vc_conexion);
    }
......

      function 
__destruct()
        {
                @
mysql_free_result($this->vc_conexion);
                
$this->vc_servidor            null;
                
$this->vc_usuario             null;
                 .......... 
el resto de variables .........
 
        } 
El resto de funciones no creo que influyan puesto que al solo instanciarlo, en el caso de estar el problema estaría en el constructor o destructor (supongo....).

Y con respecto a la necesidad de realizar varias consultas, imaginate en la situacion de seleccionar el texto de unos botones, despues las rutas de algunas imagenes, ... por ello se necesitan varias consultas a la base de datos.

Podría usar el mismo nombre de constructor, pero... y porque no usar distintos? segun creo se puede, no?

Alguna idea por donde puede estar el problema?

Muchas gracias de antemano
  #4 (permalink)  
Antiguo 09/09/2011, 22:09
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 8 años, 4 meses
Puntos: 297
Respuesta: Varias instancias a clase. Error

Según tengo constancia yo, no se puede declarar inlcudes o requiere dentro de las clases, lo tienes que hacer fuera.
  #5 (permalink)  
Antiguo 09/09/2011, 22:33
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 9 años, 9 meses
Puntos: 461
Respuesta: Varias instancias a clase. Error

buenas, si vas a trabajar con objetos y conexion a base de datos lo mejor es que trabaje con PDO, de esta puedes sacar una capa de abstracción y utilizar todos los metodos que esta nos brinda, otra cosa la implementación que estas haciendo no es correcta, para que instanciar dos veces una clase que hace lo mismo?? la ventaja de tener clase de conexiones es que con una instancia de esta puedes hacer todas las operaciones que necesites con la base de datos con una sola instancia en el momento que vas a trabajar, asi que revisa bien la forma en que trabajas con los objetos, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 10/09/2011, 09:07
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 8 años, 4 meses
Puntos: 1
Respuesta: Varias instancias a clase. Error

Hola:

Lo primero, gracias por contestar. Os comento:

hasdpk: He probado en varios sitios la inclusión de "includes". Primero lo intenté fuera como tu muy bien indicas, pero no me funcionaba. Conforme lo he puesto (dentro) el funcionamiento en mi caso es el deseado. Otro tema es que sea mas o menos correcto ;)

carlos_belisario: Voy a revisar si mi proveedor me "permite" la utilización de PDO. Tiene algunas "utilidades" desactivadas. Lo reviso. En caso afirmativo mirare y optaré por esta opcion. Sino, lo continuaré usando POO (que remedio!)
Con respecto a instanciar varios objetos que hacen lo mismo, me parece correcto lo que me indicas, pero.... en una clase "coche", todos hacen lo mismo, "arrancar, parar, ..." y se pueden hacer varias instancias, no? $ford = new coche(); , $peugeot = new coche(); . Cierto que para hacer lo mismo no es correcto crear dos instancias (por eficiencia), pero debería permitirme crear 2, 5 o 20. (igual que en la clase coche). Corregirme si estoy en un error. Voy a ver si saco algo en claro.

Sigo revisandolo. Se aceptan sugerencias y comentarios!

Un saludo
  #7 (permalink)  
Antiguo 10/09/2011, 09:53
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 8 años, 4 meses
Puntos: 297
Respuesta: Varias instancias a clase. Error

No soy un experto en POO, pero

"$ford = new coche(); , $peugeot = new coche();" debe ser el objeto coche, y ford y peugeot la marca, o sea:

Código PHP:
Ver original
  1. $coche = new coche();
  2. $coche->marca = 'ford';
  3. $coche->marca = 'peugeot';

Corríjanme si me equivoco.
  #8 (permalink)  
Antiguo 10/09/2011, 11:47
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 8 años, 4 meses
Puntos: 1
Respuesta: Varias instancias a clase. Error

Efectivamente, lo que dices es correcto según el nivel de abstraccion. No pensaba que ibais a ser tan precisos con una definicion de variable que contiene un objeto (se puede llamar como quieras) y pensaba que la idea general que queria transmitir se podia entender. Ya veo que no. Modifico los nombres de variables

class coche();

$inst_coche1 = new coche();
$inst_coche2 = new coche();
$asfjiejfsoe = new coche();
.....

Se me ocurre este otro ejemplo, a ver si así no creo confusion...

class hombre();

$hasdpk = new hombre;
$grescafe = new hombre;
$oscar = new hombre;
$antonio = new hombre;
....

Espero ahora ya no haya confusion de mi problema.

Nota: Creo que se me ha puesto algun caracter oculto (o similar) que es lo que me esta dando el problema. Ya contare....

Un saludo
  #9 (permalink)  
Antiguo 10/09/2011, 12:51
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 8 años, 4 meses
Puntos: 297
Respuesta: Varias instancias a clase. Error

Te volvería a pasar exactamente lo mismo :P

Código PHP:
Ver original
  1. $hombre = new hombre();
  2.  
  3. $hombre->nombre = 'hasdpk';
  4. $hombre->nombre = 'grescafe';
  5. $hombre->nombre = 'oscar';
  6. $hombre->nombre = 'antonio';

Yo tenía un profesor que explicó en varias ocasiones lo que eran los objetos y lo hacía con objetos de la vida real, pero su problema era que usaba objetos muy grandes. Al final entendí que eran los objetos, pero lo hice a mi modo, y que te explico:

Imagínate un tornillo. Es un objeto muy pequeño y que se puede utilizar en muchos sitios, ya sea en un coche, en un barco, en una camilla de hospital, etc, pero no todos los tornillos son iguales, tienen cabezas distintas (plano, estrella, torx, etc) y tamaños dispares.

Yo puedo tener muchos tornillos, planos, estrella, torx.. o de más tipo, colores, tamaños, etc., pero al fin de cuentas... sigue siendo un tornillo.

Espero ayudarte XD
  #10 (permalink)  
Antiguo 10/09/2011, 13:07
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 9 años, 9 meses
Puntos: 461
Respuesta: Varias instancias a clase. Error

Cita:
Iniciado por grescafe Ver Mensaje
Hola:

Lo primero, gracias por contestar. Os comento:

....

carlos_belisario: Voy a revisar si mi proveedor me "permite" la utilización de PDO. Tiene algunas "utilidades" desactivadas. Lo reviso. En caso afirmativo mirare y optaré por esta opcion. Sino, lo continuaré usando POO (que remedio!)
Con respecto a instanciar varios objetos que hacen lo mismo, me parece correcto lo que me indicas, pero.... en una clase "coche", todos hacen lo mismo, "arrancar, parar, ..." y se pueden hacer varias instancias, no? $ford = new coche(); , $peugeot = new coche(); . Cierto que para hacer lo mismo no es correcto crear dos instancias (por eficiencia), pero debería permitirme crear 2, 5 o 20. (igual que en la clase coche). Corregirme si estoy en un error. Voy a ver si saco algo en claro.


Sigo revisandolo. Se aceptan sugerencias y comentarios!

Un saludo
como te indique es incorrecto, si necesitas dos coches puedes usar lo que te indica el amigo hasdpk, si los coches tienes acciones (metodos ) o atributos diferentes, que lo harían unicos entonces tendrias que utilizar la herencia, de tal manera que coche sea una clase padre dandole los atributos que todos los coches tengan en comun y entonces la clase ford le darias los metodos y atributos que sean solo de los ford e igual para la clase peugeot, antes de lanzar el codigo ve bien el diseño de tus clases, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #11 (permalink)  
Antiguo 10/09/2011, 13:16
 
Fecha de Ingreso: diciembre-2007
Mensajes: 194
Antigüedad: 12 años, 1 mes
Puntos: 5
Respuesta: Varias instancias a clase. Error

Cita:
Iniciado por carlos_belisario Ver Mensaje
como te indique es incorrecto, si necesitas dos coches puedes usar lo que te indica el amigo hasdpk, si los coches tienes acciones (metodos ) o atributos diferentes, que lo harían unicos entonces tendrias que utilizar la herencia, de tal manera que coche sea una clase padre dandole los atributos que todos los coches tengan en comun y entonces la clase ford le darias los metodos y atributos que sean solo de los ford e igual para la clase peugeot, antes de lanzar el codigo ve bien el diseño de tus clases, saludos
Es mas, en el caso de conexiones a bases de datos, es recomendable utilizar clases que implementan el patrón singleton, que solo permite instanciar un mismo objeto de la clase, de tal manera, que en tu caso, dicho patrón te devolvería el objeto previamente utilizado.

No obstante, mi recomendación, si te vas a meter con POO, es que primero entiendas bien cosas tan básicas como estas.
__________________
Aprender J2EE en www.programacionj2ee.com.
Mi framework PHP D Framework.
  #12 (permalink)  
Antiguo 10/09/2011, 13:29
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 9 años, 9 meses
Puntos: 461
Respuesta: Varias instancias a clase. Error

Cita:
Iniciado por MiLLeN Ver Mensaje
Es mas, en el caso de conexiones a bases de datos, es recomendable utilizar clases que implementan el patrón singleton, que solo permite instanciar un mismo objeto de la clase, de tal manera, que en tu caso, dicho patrón te devolvería el objeto previamente utilizado.

No obstante, mi recomendación, si te vas a meter con POO, es que primero entiendas bien cosas tan básicas como estas.
según muchas personas no es recomendable utilizar singleton en clases de conexion, te dejo una discusión similar http://www.forosdelweb.com/f18/estoy...1/#post3572245, hay otra donde dan mas detalles del porque, dejame ver si la logro encontrar, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #13 (permalink)  
Antiguo 10/09/2011, 14:18
 
Fecha de Ingreso: diciembre-2007
Mensajes: 194
Antigüedad: 12 años, 1 mes
Puntos: 5
Respuesta: Varias instancias a clase. Error

Cita:
Iniciado por carlos_belisario Ver Mensaje
según muchas personas no es recomendable utilizar singleton en clases de conexion, te dejo una discusión similar http://www.forosdelweb.com/f18/estoy...1/#post3572245, hay otra donde dan mas detalles del porque, dejame ver si la logro encontrar, saludos
Eso es si utilizas PDO, yo utilizo una capa de persistencia mediante Providers, un Provider por cada tipo de base de datos, es mucho mas personalizable.
__________________
Aprender J2EE en www.programacionj2ee.com.
Mi framework PHP D Framework.
  #14 (permalink)  
Antiguo 10/09/2011, 15:52
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 9 años, 9 meses
Puntos: 461
Respuesta: Varias instancias a clase. Error

fijate aca la explicación mas detallada de porque no es recomendable el uso de singleton para clases db, revisalo y nos comentas que te parece, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #15 (permalink)  
Antiguo 11/09/2011, 01:17
 
Fecha de Ingreso: diciembre-2007
Mensajes: 194
Antigüedad: 12 años, 1 mes
Puntos: 5
Respuesta: Varias instancias a clase. Error

Cita:
Iniciado por carlos_belisario Ver Mensaje
fijate aca la explicación mas detallada de porque no es recomendable el uso de singleton para clases db, revisalo y nos comentas que te parece, saludos
La verdad es que nunca he tenido que hacer una aplicación distribuida, y bueno, si no hay mas de una base de datos el patrón singleton te asegura tener solo una conexión y utilizar esta.

Con varias conexiones, creo que seguiría utilizando el patrón singleton, y crearía dos clases diferentes que lo implementaran. Te da mucha mas seguridad sobre todo a nivel de desarrollo de que nadie va a meter las manos donde no debe.

Aparte, me has puesto un enlace a un usuario que utiliza Registry... Un vector para almacenar objetos, que si quieres usar tienes que pedírselos, por mas que trato de encontrarle una ventaja a este patrón... Es mas, ya que estoy, voy a abrir un debate en este mismo foro para que alguien me convenza de porque usar este patrón tan de moda, y que me parece tan prescindible...
__________________
Aprender J2EE en www.programacionj2ee.com.
Mi framework PHP D Framework.
  #16 (permalink)  
Antiguo 11/09/2011, 02:31
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 8 años, 4 meses
Puntos: 1
Respuesta: Varias instancias a clase. Error

Hola:

Una vez mas me expliqué por lo visto de forma incorrecta... Pido mil disculpas por ello. A ver si esta es la buena.... Al indicar

class hombre();

$hasdpk = new hombre;
$grescafe = new hombre;
$oscar = new hombre;
$antonio = new hombre;

No me refería a "oscar", o "antonio"... como nombres propios, sino como "ser único", pudiendo usar el número de documento (DNI en España, repito, no como atributo sino como identificador porque direis que DNI es otro atributo ;) ) o cualquier otro identificador para ese "identificador de ser único", el cual tiene sus propiedades "unicas". Y dentro de la clase correspondiente, tiene los atributos X tipo "altura", "peso", "dni", "nombre", "..." y métodos tipo "comer", "beber".... (ya sea en su propia clase o atributos o metodos heredados de otras). Esta claro que "oscar" hay millones de personas con ese nombre y como "nombre propio" es un atributo, eso es 100% correcto, pero me referia como identificador, (por no poner $oscarPerezPerez_DNI12345678A_AvdaPrimera3b_nacido 01012011_bla_bla = new hombre; ) Logicamente me direis que todos esos son atributos y efectivamente es asi. Me refiero a simplemente un identificador, como si pusiera "$aeifapove93kd83kdj3 = new hombre;" o "$inst_hombre1" o .... no a sus atributos. porque entonces cualquier cosa que pongamos como identificador "lógico" podría ser un atributo..... mirando el tornillo, como lo llamamos? la única solucion es llamarlo con un identificador tipo $32da puesto que todo el resto son atributos. Espero que ahora sí haya podido transmitir lo que intentaba. Simplemente un identificador "único" (nombre_instancia) y no como atributo.

Si de esta forma, cambiando el identificador queda mas claro y enmiendo mi mala forma de explicarme, pues lo cambio como hize con el ejemplo tambien mal expresado por mi parte sobre coche.......

class hombre();

$j39sjfj93jsñf = new hombre;
$3udfnedfkgu = new hombre;
$89jgnsdiekfs = new hombre;
......

ahora espero que no me podais decir que 89jgnsdiekfs es un atributo o metodo ;)

Respecto a lo del método singleton, no lo conocia, y por lo que veo hay discrepancia en su uso. Voy a ver si me documento sobre todo lo que habeis comentado. Ya os contaré

Un saludo y gracias

Etiquetas: clase, instancia, php, poo
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 10:23.