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

Respuesta
 
Herramientas Desplegado
Antiguo 23-feb-2008, 09:52   #1 (permalink)
Blade_Stom ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 305
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?
Blade_Stom está desconectado   Responder Citando
Antiguo 23-feb-2008, 14:00   #2 (permalink)
MrAndersonWEB está en el buen camino
 
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
MrAndersonWEB está desconectado   Responder Citando
Antiguo 23-feb-2008, 23:49   #3 (permalink)
Blade_Stom ha deshabilitado el karma
 
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
Blade_Stom está desconectado   Responder Citando
Antiguo 24-feb-2008, 03:22   #4 (permalink)
drbit no se puede cailificar en este momento
 
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
drbit está desconectado   Responder Citando
Antiguo 24-feb-2008, 04:42   #5 (permalink)
Blade_Stom ha deshabilitado el karma
 
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
Blade_Stom está desconectado   Responder Citando
Antiguo 24-feb-2008, 04:50   #6 (permalink)
drbit no se puede cailificar en este momento
 
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
drbit está desconectado   Responder Citando
Antiguo 24-feb-2008, 06:01   #7 (permalink)
Blade_Stom ha deshabilitado el karma
 
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
Blade_Stom está desconectado   Responder Citando
Antiguo 24-feb-2008, 06:09   #8 (permalink)
drbit no se puede cailificar en este momento
 
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:
$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
__________________
Manual XHTML
drbit está desconectado   Responder Citando
Antiguo 24-feb-2008, 12:05   #9 (permalink)
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: Queretaro, Mexico
Mensajes: 12.597
Re: acceder a metodo estatico

Trasladado a Orientado a Objetos.

Puedes hacer simplemente esto:
Código PHP:
$resultado call_user_func$nombreClase"nombreMetodo" ); 
Saludos,.
__________________
Blog Web
GatorV 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 04:28.


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