Cita:
Iniciado por yoguuu (..) 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 originalclass TestASG {
private $asg, $met;
public function __construct ( $cual = NULL ) {
self::setArray( isset($cual) ?
$cual : 'POST' ); // Valor predeterminado }
public function setArray( $cual ) {
switch( $this->met = $cual ) {
case 'GET' : { $this->asg =& $_GET; break; }
case 'POST' : { $this->asg =& $_POST; break; }
default : { $this->asg = NULL; break; }
}
}
public function echoArray() {
echo "\$_" . $this->met . "\n";
}
public function echoVar( $item ) {
echo $this->asg[$item]."\n";
}
public function echoVars() {
while(list($key,$val) = each($this->asg)) echo "[$key] = $val\n";
}
public function setVar( $item, $valor ) {
$this->asg[$item] = $valor;
}
}
Como ejemplo de uso:
Código php:
Ver original$_POST['foo'] = "Hola";
$_GET['foo'] = "Mundo";
$test = new TestASG(); // Referencia por defecto a $_POST
$test->echoVar('foo'); // Salida: "Hola"
$test->setArray('GET'); // Cambia referencia a $_GET
$test->echoVar('foo'); // Salida: "Mundo"
$test->setArray('POST');
$test->setVar('foo','Adiós'); // Actualiza $_POST['foo'] = "Adiós"
$test->setVar('bar','Chau'); // Crea $_POST['bar'] = "Chau"
$test->echoArray(); // Salida: "$_POST"
$test->echoVars(); // Muestra índices y valores
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.