Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 01-mar-2007, 07:21   #1 (permalink)
MarioNunes ha deshabilitado el karma
 
Avatar de MarioNunes
 
Fecha de Ingreso: agosto-2005
Mensajes: 265
Molesto Tengo el objeto pero no puedo acceder al método

Buenas a tod@s,

Veréis, tengo un problemilla al cual no le veo lógica aparente...

Todavía no tengo un ejemplo legible, así que tal vez no haga falta que lo haga si os describo el error que me da en pantalla.

Tengo en una clase un metodo que da valor a una variable de la clase como la instancia de una clase que contiene un array de objetos de otra clase. Un manejador de datos.

Por lo que cuando intento acceder a un dato:

$resultado=$this->variable->manejador->ObtenerDato()

$resultado debe contener un array de objetos de un objeto.

Ese objeto dato, tiene sus propiedades (private) y sus metodos (public)

Cuando hago un print_r($resultado) me enseña las propiedades, sus nombres y sus valores.

Si hago publica una propiedad, puedo acceder a ella...

Enfin, después de esta chapada... llego al problema:

$resultado[0]->MetodoDato();

Y me dice:

Fatal error: Call to a member function MetodoDato() on a non-object in (fichero.php)

Cuando con el print_r de $restulado me está diciendo que es un objeto, cuando también is_object me devuelve true... cuando también puedo acceder a la propiedad si está publica...

Obviamente algo estoy haciendo mal porque no me está dando el resultado deseado... ¿Alguien ha tenido este problema?

Gracias por haberte leído la parrafada y por tu posible respuesta ^_^

Un saludo.
__________________
www.pensandoenred.com
MarioNunes está desconectado   Responder Citando
Antiguo 01-mar-2007, 07:55   #2 (permalink)
$this->role('moderador');
GatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradable
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ags/
Mensajes: 13.093
Re: Tengo el objeto pero no puedo acceder al método

Si print_r te esta diciendo que $resultado es un objeto, porque entonces tratas de llamar a un metodo como array?

En lugar de hacer:
Código PHP:
$resultado[0]->MetodoDato(); 
Deberias de hacer:
Código PHP:
$resultado->MetodoDato(); 
Solo en el caso que tu objeto $resultado implementara ArrayAccess y que te regresara un objeto entonces si podrias hacerlo.

Tambien te pido si posteas codigo real ya que asi con suposiciones es dificil encontrar el error ya que como tu dices todo deberia de funcionar inclusive si testeas algo asi funciona:
Código PHP:
class Prueba3 {
     public function 
unMetodo() {
          echo 
"Soy unMetodo() de Prueba3";
     }
}

class 
Prueba2 {
     public function 
obtenerDato() {
           return new 
Prueba3();
     }
}

class 
Prueba {
      public 
$variable;
      public function 
__construct() {
           
$this->variable = new Prueba2();
      }
}

$prueba = new Prueba();
$resultado $prueba->variable->obtenerDato();
$resultado->unMetodo(); 
GatorV está desconectado   Responder Citando
Antiguo 01-mar-2007, 09:15   #3 (permalink)
MarioNunes ha deshabilitado el karma
 
Avatar de MarioNunes
 
Fecha de Ingreso: agosto-2005
Mensajes: 265
Re: Tengo el objeto pero no puedo acceder al método

Cita:
Iniciado por GatorV Ver Mensaje
Si print_r te esta diciendo que $resultado es un objeto, porque entonces tratas de llamar a un metodo como array?

En lugar de hacer:
Código PHP:
$resultado[0]->MetodoDato(); 
Deberias de hacer:
Código PHP:
$resultado->MetodoDato(); 
Solo en el caso que tu objeto $resultado implementara ArrayAccess y que te regresara un objeto entonces si podrias hacerlo.

Tambien te pido si posteas codigo real ya que asi con suposiciones es dificil encontrar el error ya que como tu dices todo deberia de funcionar inclusive si testeas algo asi funciona:
Código PHP:
class Prueba3 {
     public function 
unMetodo() {
          echo 
"Soy unMetodo() de Prueba3";
     }
}

class 
Prueba2 {
     public function 
obtenerDato() {
           return new 
Prueba3();
     }
}

class 
Prueba {
      public 
$variable;
      public function 
__construct() {
           
$this->variable = new Prueba2();
      }
}

$prueba = new Prueba();
$resultado $prueba->variable->obtenerDato();
$resultado->unMetodo(); 
Mas bien sería:
Código PHP:
$resultado $prueba->variable->obtenerDato();
$resultado[0]->unMetodo(); 
Estoy haciendo pruebas de código y en cuanto tenga un ejemplo disponible lo pego.
__________________
www.pensandoenred.com
MarioNunes está desconectado   Responder Citando
Antiguo 02-mar-2007, 01:36   #4 (permalink)
MarioNunes ha deshabilitado el karma
 
Avatar de MarioNunes
 
Fecha de Ingreso: agosto-2005
Mensajes: 265
Re: Tengo el objeto pero no puedo acceder al método

Gracias por responder GatorV,

Paro al final al sacar un ejemplo del código para postearlo aquí como ejemplo del problema que tenía, encontré el error y no era sintáctico... una de las consultas de acceso a datos no estaba construida adecuadamente y devolvía más resultados de los necesarios por lo que al volver a intentar a llamar a ese método pues daba el error...

Me estoy dando cuenta que para hacer consultas de POO es más complicado... ^_^

Gracias por tu atención.

Un saludo.
__________________
www.pensandoenred.com
MarioNunes está desconectado   Responder Citando
Antiguo 02-mar-2007, 09:40   #5 (permalink)
B**
B** ha deshabilitado el karma
 
Avatar de B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Re: Tengo el objeto pero no puedo acceder al método

Mm pues si te refieres a las consultas SQL, siguen siendo las mismas... eso no depende de si usas POO o estructural.
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
B** está desconectado   Responder Citando
Antiguo 05-mar-2007, 03:50   #6 (permalink)
MarioNunes ha deshabilitado el karma
 
Avatar de MarioNunes
 
Fecha de Ingreso: agosto-2005
Mensajes: 265
Re: Tengo el objeto pero no puedo acceder al método

No no me refiero a eso,

Son unas clases para tener manejadores de arrays de objetos de objetos... una paja mental de las raras ^_^ si cada posición de un array es un objeto e intentas recorrer más posiciones de las que tiene, al intentar acceder a un método pues falla ^_^ me di cuenta al intentar reproducir el error emulando los arrays a mano en vez de ser generados por las consultas.

Un saludo.
__________________
www.pensandoenred.com
MarioNunes está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:36.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93