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

¿Clase a partir de una variable?

Estas en el tema de ¿Clase a partir de una variable? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola. Tengo el siguiente problemilla. Tengo una función PHP Código PHP: function  F1 () {     require_once( 'class/usuario' );      $lista  =  usuario :: getDatos (); }  ...
  #1 (permalink)  
Antiguo 31/03/2008, 22:51
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
¿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.
  #2 (permalink)  
Antiguo 01/04/2008, 00:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
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
  #3 (permalink)  
Antiguo 01/04/2008, 07:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
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
  #4 (permalink)  
Antiguo 01/04/2008, 08:59
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: ¿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.
  #5 (permalink)  
Antiguo 01/04/2008, 09:04
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
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!!!
  #6 (permalink)  
Antiguo 01/04/2008, 09:29
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
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.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 01/04/2008 a las 10:45
  #7 (permalink)  
Antiguo 01/04/2008, 09:39
Avatar de vanetino  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima, Peru
Mensajes: 22
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: ¿Clase a partir de una variable?

De acuerdo Enrique, que manera de complicarse la vida.


Saludos
  #8 (permalink)  
Antiguo 01/04/2008, 14:42
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
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?
  #9 (permalink)  
Antiguo 01/04/2008, 14:47
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
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.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 01/04/2008, 14:56
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
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
  #11 (permalink)  
Antiguo 01/04/2008, 15:22
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: ¿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.
  #12 (permalink)  
Antiguo 01/04/2008, 15:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
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/04/2008 a las 16:25
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 00:58.