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

Respuesta
 
Herramientas Desplegado
Antiguo 31-mar-2008, 22:51   #1 (permalink)
hammett ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
¿Clase a partir de una variable?

Hola. Tengo el siguiente problemilla. Tengo una función PHP

Código PHP:
function F1() {
    require_once(
'class/usuario');
    
$lista usuario::getDatos();

En la que llamo al método estático getDatos() de la clase usuario. Lo que quiero es poder llamar al método a partir del valor de una variable pasada como parametro. O sea, algo así:

Código PHP:
function F1($a) {
    require_once(
'class/usuario');
    
$lista $a::getDatos();  // y aqui esta la vaina que no me canciona ???

He intentado de varias formas pero no me resulta. Esto ya me tiene cabezón. Ayuda por favor, gracias.
hammett está desconectado   Responder Citando
Antiguo 01-abr-2008, 00:52   #2 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 442
Re: ¿Clase a partir de una variable?

Creo que el planteamiento deberia ser este

Código PHP:
function F1($a) {
    require_once(
'class/usuario');
    
$lista usuario::getDatos($a);  // <----

y porsupuesto redefinir "getDatos" en la clase usuario para que acepte el parametro


Quim
quimfv está desconectado   Responder Citando
Antiguo 01-abr-2008, 07:41   #3 (permalink)
hammett ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Re: ¿Clase a partir de una variable?

No quimfv. Tal vez no me hice entender. En la función:

Código PHP:
function F1($a) {
  require_once(
'class/usuario');  // ojo con estas nuevas clases
  
require_once('class/funcionario');  // ojo con estas nuevas clases
  
require_once('class/empleado');
  
$lista $a::getDatos();

La variable $a podría ser de cualquiera de las tres clases (usuario, funcionario o empleado, y las tres clases tienen el método estático getDatos()). Lo que yo quiero hacer cuando llame a F1 es asignar a $a='usuario', por ejemplo, para que así utilizar getDatos() de la clase usuario. Entonces lo que quiero es que a través de una asignación a la variable $a esta se comporte como si fuera una clase.

En el manual de Php hay algo que se llama Funciones variables pero al parecer no funciona con métodos estáticos que es lo que necesito.

Me hice entender??? Alguién que sepa como hago??? Gracias
hammett está desconectado   Responder Citando
Antiguo 01-abr-2008, 08:59   #4 (permalink)
$this->role('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: /home/ags/
Mensajes: 13.961
Re: ¿Clase a partir de una variable?

Hola hammett,

Puedes usar call_user_func para eso:
Código PHP:
function F1($a) {
  require_once(
'class/usuario');  // ojo con estas nuevas clases
  
require_once('class/funcionario');  // ojo con estas nuevas clases
  
require_once('class/empleado');
  
$lista call_user_func( array( $a"getDatos" ) );

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 01-abr-2008, 09:04   #5 (permalink)
hammett ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Re: ¿Clase a partir de una variable? caso cerrado

GatorV me leiste la mente. Después de revisar cuidadosamente el manual de Php me di cuenta de la existencia de call_user_func. Iba a postear la solución en este momento. De todas formas gracias GatorV, eres un genio!!!
hammett está desconectado   Responder Citando
Antiguo 01-abr-2008, 09:29   #6 (permalink)
Colaborador
enriqueplace tiene algunos puntos positivos de karma
 
Avatar de enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 750
Enviar un mensaje por Skype™ a enriqueplace
Re: ¿Clase a partir de una variable?

Si te entendí bien, no tienes que hacer el requiere dentro, lo tienes que hacer afuera, antes de entrar en la función.

Evalúa si no tienes una herencia ahí, o si tienes que hacer una interfaz para asegurarte el diseño, es decir, que todas las clases tengan el método "getDatos".

Código PHP:

// index.php
require_once('class/Usuario.php');  // ojo con estas nuevas clases
require_once('class/Funcionario.php');  // ojo con estas nuevas clases
require_once('class/Empleado.php');

$Usuario = new Usuario();

F1$Usuario );

// datos.interface.php

interface Datos{
   public function 
getDatos();
}


// funciones.php
require_once( 'datos.interface.php' );

function 
F1Datos $a ) {
  
$lista $a::getDatos();

La idea que la interfaz tenga un nombre más coherente de acuerdo a el contexto de tus clases.
__________________
Saludos, Enrique Place

Reserva tu lugar, no te lo pierdas:
Nuevo Taller a Distancia de POO para PHP (2008)

Última edición por enriqueplace; 01-abr-2008 a las 10:45.
enriqueplace está desconectado   Responder Citando
Antiguo 01-abr-2008, 09:39   #7 (permalink)
vanetino ha deshabilitado el karma
 
Avatar de vanetino
 
Fecha de Ingreso: diciembre-2006
Ubicación: Lima, Peru
Mensajes: 23
Re: ¿Clase a partir de una variable?

De acuerdo Enrique, que manera de complicarse la vida.


Saludos
vanetino está desconectado   Responder Citando
Antiguo 01-abr-2008, 14:42   #8 (permalink)
hammett ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Re: ¿Clase a partir de una variable?

Buenas, creo que el código de enriqueplace no funciona, ya probe y nada me sale el error:
Código:
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in...
Al parecer no vale hacer llamados a métodos estáticos.

Pero regresando a mi caso, que fué resuelto con la función
Código PHP:
call_user_func 
Me pregunto ahora: ¿Y si quiero pasar parametros?, o sea algo así:
Código PHP:
$param 'param';
$lista call_user_func( array( $a"getDatos($param)" ) ); 
Como se hace?
hammett está desconectado   Responder Citando
Antiguo 01-abr-2008, 14:47   #9 (permalink)
Colaborador
enriqueplace tiene algunos puntos positivos de karma
 
Avatar de enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 750
Enviar un mensaje por Skype™ a enriqueplace
Re: ¿Clase a partir de una variable?

El tema es que tomé tu código y le agregué arriba, de forma rápida.

Para hacerlo funcionar de otra forma es, como se hace una instancia antes, en vez de hacer "::" hacer "->".

Pero el punto es, concretamente lo que querés hacer "conceptualmente" y ver si tiene sentido llamar por clase o por instancia, dependiendo del contexto.
__________________
Saludos, Enrique Place

Reserva tu lugar, no te lo pierdas:
Nuevo Taller a Distancia de POO para PHP (2008)
enriqueplace está desconectado   Responder Citando
Antiguo 01-abr-2008, 14:56   #10 (permalink)
hammett ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Re: ¿Clase a partir de una variable?

Pues en mi caso necesito hacer el llamado al método estático, o sea por clase. Saludos
hammett está desconectado   Responder Citando
Antiguo 01-abr-2008, 15:22   #11 (permalink)
$this->role('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: /home/ags/
Mensajes: 13.961
Re: ¿Clase a partir de una variable?

Para pasar parámetros los pasas así:
Código PHP:
$param 'param';
$lista call_user_func( array( $a"getDatos" ), $param ); 
Te invito a leer el manual de PHP la sección de call_user_func.

Saludos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 01-abr-2008, 15:38   #12 (permalink)
hammett ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Je, como que no lei muy bien. Gracias GatorV, tu ayuda a sido muy útil, pasar parámetros funciona al peluche.

Uff, que brutal esa vaina, se pueden pasar incluso objetos. Perdón por el asombro pero es que esta muy bacano y es muy poco lo que he vivido (Largo es el camino pero vale la pena). Gracias por la ayuda GatorV.

Última edición por GatorV; 01-abr-2008 a las 16:25.
hammett 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 13:51.


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