Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   ¿Clase a partir de una variable? (http://www.forosdelweb.com/f68/clase-partir-variable-571265/)

hammett 31/03/2008 22:51

¿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.

quimfv 01/04/2008 00:52

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

hammett 01/04/2008 07:41

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

GatorV 01/04/2008 08:59

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.

hammett 01/04/2008 09:04

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!!!

enriqueplace 01/04/2008 09:29

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.

vanetino 01/04/2008 09:39

Re: ¿Clase a partir de una variable?
 
De acuerdo Enrique, que manera de complicarse la vida.


Saludos

hammett 01/04/2008 14:42

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?

enriqueplace 01/04/2008 14:47

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.

hammett 01/04/2008 14:56

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

GatorV 01/04/2008 15:22

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.

hammett 01/04/2008 15:38

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.


La zona horaria es GMT -6. Ahora son las 05:20.

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