Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   Tengo el objeto pero no puedo acceder al método (http://www.forosdelweb.com/f68/tengo-objeto-pero-no-puedo-acceder-metodo-469220/)

MarioNunes 01/03/2007 08:21

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.

GatorV 01/03/2007 08:55

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


MarioNunes 01/03/2007 10:15

Re: Tengo el objeto pero no puedo acceder al método
 
Cita:

Iniciado por GatorV (Mensaje 1912454)
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.

MarioNunes 02/03/2007 02:36

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.

B** 02/03/2007 10:40

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.

MarioNunes 05/03/2007 04:50

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.


La zona horaria es GMT -6. Ahora son las 10:56.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.