Ver Mensaje Individual
  #5 (permalink)  
Antiguo 16/11/2008, 18:02
Avatar de Deschamps
Deschamps
 
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 7 meses
Puntos: 8
Respuesta: Alternativa Variables variables y $this

Cita:
Iniciado por yoguuu Ver Mensaje
(..) Quiero hacer un metodo getNameValue($name), que en función de si el atributo $this->method es igual a "POST" o "GET este metodo cree dinámicamente esas variables i digamos recupere el valor que tienen (..)
Imagino que buena parte de tus tribulaciones tendrán explicación en este párrafo del manual que cito literalmente: "Warning: Por favor tenga en cuenta que las variables variables no pueden usarse con las Matrices superglobales de PHP al interior de funciones o métodos de clase".

Sobre lo que pretendes hacer, la verdad es que tampoco acabo de encontrarle mucho sentido, a menos que sea por simple comodidad (aunque redundante). En cualquier caso, es posible que la alternativa de usar referencias a los arrays superglobales pueda resultarte interesante. Por ejemplo:

Código php:
Ver original
  1. class TestASG {
  2.    
  3.     private $asg, $met;
  4.    
  5.     public function __construct ( $cual = NULL ) {
  6.        
  7.         self::setArray( isset($cual) ? $cual : 'POST' ); // Valor predeterminado
  8.     }
  9.    
  10.     public function setArray( $cual ) {
  11.         switch( $this->met = $cual ) {
  12.             case 'GET'  : { $this->asg =& $_GET;  break; }
  13.             case 'POST' : { $this->asg =& $_POST; break; }
  14.             default     : { $this->asg = NULL;    break; }
  15.         }
  16.     }
  17.  
  18.     public function echoArray() {
  19.         echo "\$_" . $this->met . "\n";
  20.     }
  21.  
  22.     public function echoVar( $item ) {
  23.         echo $this->asg[$item]."\n";
  24.     }
  25.  
  26.     public function echoVars() {
  27.         while(list($key,$val) = each($this->asg))
  28.             echo "[$key] = $val\n";
  29.     }
  30.  
  31.     public function setVar( $item, $valor ) {
  32.         $this->asg[$item] = $valor;
  33.     }
  34. }

Como ejemplo de uso:

Código php:
Ver original
  1. $_POST['foo'] = "Hola";
  2. $_GET['foo'] = "Mundo";
  3.    
  4. $test = new TestASG();        // Referencia por defecto a $_POST
  5. $test->echoVar('foo');        // Salida: "Hola"
  6. $test->setArray('GET');       // Cambia referencia a $_GET
  7. $test->echoVar('foo');        // Salida: "Mundo"
  8.    
  9. $test->setArray('POST');
  10. $test->setVar('foo','Adiós'); // Actualiza $_POST['foo'] = "Adiós"
  11. $test->setVar('bar','Chau');  // Crea $_POST['bar'] = "Chau"
  12. $test->echoArray();           // Salida: "$_POST"
  13. $test->echoVars();            // Muestra índices y valores
  14.  
  15. var_dump($_POST);

Con el que obtendrías esta salida:

Código:
Hola
Mundo
$_POST
[foo] = Adiós
[bar] = Chau

array(2) {
  ["foo"]=>
  string(5) "Adiós"
  ["bar"]=>
  string(4) "Chau"
}
Un saludo.