Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   acceder a metodo estatico (http://www.forosdelweb.com/f68/acceder-metodo-estatico-559829/)

Blade_Stom 23/02/2008 10:52

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?

MrAndersonWEB 23/02/2008 15:00

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

Blade_Stom 24/02/2008 00:49

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

drbit 24/02/2008 04:22

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.

Blade_Stom 24/02/2008 05:42

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

drbit 24/02/2008 05:50

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.

Blade_Stom 24/02/2008 07:01

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

drbit 24/02/2008 07:09

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

GatorV 24/02/2008 13:05

Re: acceder a metodo estatico
 
Trasladado a Orientado a Objetos.

Puedes hacer simplemente esto:
Código PHP:

$resultado call_user_func$nombreClase"nombreMetodo" ); 

Saludos,.


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

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