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?
|
|
#1 (permalink) |
![]() Fecha de Ingreso: octubre-2007
Mensajes: 305
|
acceder a metodo estatico
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) |
![]() Fecha de Ingreso: enero-2005
Mensajes: 34
|
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) |
![]() Fecha de Ingreso: octubre-2007
Mensajes: 305
|
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) |
![]() Fecha de Ingreso: mayo-2006
Mensajes: 120
|
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.
__________________
Manual XHTML |
|
|
|
|
|
#5 (permalink) |
![]() Fecha de Ingreso: octubre-2007
Mensajes: 305
|
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) |
![]() Fecha de Ingreso: mayo-2006
Mensajes: 120
|
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.
__________________
Manual XHTML |
|
|
|
|
|
#7 (permalink) |
![]() Fecha de Ingreso: octubre-2007
Mensajes: 305
|
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) |
![]() Fecha de Ingreso: mayo-2006
Mensajes: 120
|
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:
Todo está muy lindo mientras que por url te hayan mandado nombre=ClaseQueExisteFeliz$nombreClase = $_GET['nombre']; eval($nombreClase."::test();"); 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
__________________
Manual XHTML |
|
|
|
![]() |
| Herramientas | |
| Desplegado | |
|
|