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

acceder a metodo estatico

Estas en el tema de acceder a metodo estatico en el foro de Frameworks y PHP orientado a objetos en Foros del Web. quiero acceder a un metodo estatico de una clase. El problema es que el nombre de esa clase esta en una variable $nombreClase Entonces yo ...
  #1 (permalink)  
Antiguo 23/02/2008, 10:52
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
acceder a metodo estatico

quiero acceder a un metodo estatico de una clase. El problema es que el nombre de esa clase esta en una variable $nombreClase
Entonces yo hago:

$valorQueMeDevuelve= $nombreClase::nombreMetodo();

y me da error, supongo que es porque piensa que $nombreClase es alguna instancia o algo.

Como puedo acceder a dicho metodo?
  #2 (permalink)  
Antiguo 23/02/2008, 15:00
 
Fecha de Ingreso: enero-2005
Mensajes: 34
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: acceder a metodo estatico

Hola

Interesante tu pregunta probé tu planteamiento y sale este error: Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ',' or ';' ....

Supongo que no se puede porque $$ se usa con variables - espacio de memoria- , y tu quieres usarlo con el nombre de la clase -que no tiene un espacio de memoria hasta que lo instancias-
Por alli que hay un truco, no se?

Pero se me ocurre que podrías usar polimorfismo para resolver tu problema. Claro, estoy asumiendo que tienes varias clases con el método estático, y que se te hace mas fácil usar una variable variable para llamar al método.

Saludos

Mr. Anderson
  #3 (permalink)  
Antiguo 24/02/2008, 00:49
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
Re: acceder a metodo estatico

lo siento pero no entiendo muy bien lo k me quieres decir.

Mi problema es basicamente que yo el nombre de la clase lo tengo dentro de una variable. tonces si hago

$valorQueMeDevuelve= $nombreClase::nombreMetodoEstatico();

esto me tira el error que tu comentas arriba.........necesito que de alguna forma se de cuenta que $nombreClase es el nombre de la clase.........como si pusiera........noticias::nombreMetodoEstatico()


un saludo
  #4 (permalink)  
Antiguo 24/02/2008, 04:22
 
Fecha de Ingreso: mayo-2006
Mensajes: 120
Antigüedad: 18 años
Puntos: 3
Re: acceder a metodo estatico

Entiendo que si no tenes PHP 5.3 > no podes hacer lo que querés.

Alternativa:

class t {
static private $s = 'probando';
static function test() {
return self::$s;
}
}
$nombreClase = 't';

eval($nombreClase."::test();");

Peligroso, pero alternativa al fin.

más info:
http://ar2.php.net/manual/en/language.oop5.constants.php

Saludos.
__________________
programación php
  #5 (permalink)  
Antiguo 24/02/2008, 05:42
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
Re: acceder a metodo estatico

tengo php 5.2.5. me recomiendas actualizarme? mi web sta en progreso y no creo k sufriera problemas,no? ai cambios que me podrian dar problemas al cambiar de version?

y de hosting, k tal¿ pk aber si vo ya cambiar.......y luego no va a aber ni un hosting que soporte esa version xD

Un saludoy gracias
  #6 (permalink)  
Antiguo 24/02/2008, 05:50
 
Fecha de Ingreso: mayo-2006
Mensajes: 120
Antigüedad: 18 años
Puntos: 3
Re: acceder a metodo estatico

No en absoluto, la release estable de php actualmente es la versión que tienes.

El eval no es tan grave siempre que $nombreClase este validado. No puede ser un input directo del usuario porque te podría ejecutar código arbitrario.

Una validación podría ser mediante class_exists.

Saludos.
__________________
programación php
  #7 (permalink)  
Antiguo 24/02/2008, 07:01
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
Re: acceder a metodo estatico

que puede ocurrir si no esta validado? a parte de logicamente de si no existe dicha clase...la compilacion cascaria.........pero bueno.......podria generar algun bug de seguridad o algo?

un saludo
  #8 (permalink)  
Antiguo 24/02/2008, 07:09
 
Fecha de Ingreso: mayo-2006
Mensajes: 120
Antigüedad: 18 años
Puntos: 3
Re: acceder a metodo estatico

Claro, imaginate que vos recibis la variable a partir de un input del usuario y no la validas:
Código:
$nombreClase = $_GET['nombre'];
eval($nombreClase."::test();");
Todo está muy lindo mientras que por url te hayan mandado nombre=ClaseQueExisteFeliz
pero imagina que un usuario te envie por url algo como system('rm -rf * //'). Esa instrucción será evaluada por eval y te reventará el directorio actual. Bueno y si el usuario tiene imaginación podría hacerte muchisimas cosas más.

Ahora si vos validas antes que se cumpla in_array($nombreClase,$listaDeClases,TRUE). No deberías tener problemas.

Para más info mira la documentación de eval:

http://ar.php.net/eval
__________________
programación php
  #9 (permalink)  
Antiguo 24/02/2008, 13:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: acceder a metodo estatico

Trasladado a Orientado a Objetos.

Puedes hacer simplemente esto:
Código PHP:
$resultado call_user_func$nombreClase"nombreMetodo" ); 
Saludos,.
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 01:44.