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

Tengo el objeto pero no puedo acceder al método

Estas en el tema de Tengo el objeto pero no puedo acceder al método en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/03/2007, 08:21
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
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
  #2 (permalink)  
Antiguo 01/03/2007, 08:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
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(); 
  #3 (permalink)  
Antiguo 01/03/2007, 10:15
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
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
  #4 (permalink)  
Antiguo 02/03/2007, 02:36
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
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
  #5 (permalink)  
Antiguo 02/03/2007, 10:40
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
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.
  #6 (permalink)  
Antiguo 05/03/2007, 04:50
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
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
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 12:54.