Richiama variabili in modo dinamico

di il
1 risposte

Richiama variabili in modo dinamico

Salve, ho questo tipo di problema.
in una classe dovrei confrontare due variabili per i quali non conosco subito i nomi.
Forse con un esempio diretto riesco a spiegarmi meglio:

$campo1 : prima variabile di confronto
$campo2 : seconda variabile di confronto

entrambe le variabili contengono il nome della variabile che dovrà essere confrontata, es:

$campo1 = "risultato['plafond']";
$campo2 = "risultato['punteggio']";

ecco cosa vorrei fare:

if($this->{$campo1} > $this->{$campo2}) { FACCIO DELLE COSE }

Scritto così ho come errore : Undefined property

PS. Premetto che la variabile esiste ed ha un valore.
Infatti prima della IF mi stampo i valori di campo1, campo2, e $this->risultato['plafond'] e $this->risultato['punteggio'] per controllare l'esistenza e il valore e non ho nessun errore.

Spero di essere stato chiaro.
Grazie

Antonio

1 Risposte

  • Re: Richiama variabili in modo dinamico

    Distinguiamo tra variabili e indici di una matrice:
    $qualcosa //<= variabile
    $qualcosa = array(
        'indice-uno'   // <= indice di una matrice
            => 'valore',
        'indice-due'   // <= indice di una matrice
            => 'valore2',
    );
    altrimenti scrivibile in:
    $qualcosa['indice-uno'] = 'valore';
    
    Dal codice d'esempio che hai messo, sembra tu voglia accedere a due indici di una matrice, quindi dovresti fare:
    $campo1 = "plafond";
    $campo2 = "punteggio";
    
    if($this->risultato[$campo1] > $this->risultato[$campo2]) { FACCIO DELLE COSE }
    Altrimenti, se la variabile cambia, ma l'indice resta uguale puoi fare:
    $campo1 = "risultato";
    $campo2 = "risultato2";
    
    if($this->{$campo1}['plafond'] > $this->{$campo2}['punteggio']) { FACCIO DELLE COSE }
    Oppure, infine, se entrambi possono cambiare:
    $campo1 = "risultato";
    $campo2 = "risultato2";
    $indice1 = 'plafond';
    $indice2 = 'punteggio';
    
    if($this->{$campo1}[$indice1] > $this->{$campo2}[$indice2]) { FACCIO DELLE COSE }
Devi accedere o registrarti per scrivere nel forum
1 risposte