2011-02-20 5 views
23

Sto cercando di capire come posso usare una variabile, che è stata impostata all'esterno di una funzione, all'interno. C'è un modo per farlo? Ho provato a impostare la variabile su "globale", ma non sembra funzionare come previsto.Ottieni variabili dall'esterno, all'interno di una funzione in PHP

Un semplice esempio del mio codice

$var = '1'; 

function() { 
$var + 1; 
return $var; 
} 

voglio questo, per restituire il valore di 2.

+1

Da 'Io voglio questo, per restituire il valore di 2.' Suggerirei di fare' $ var = function ($ var) {return $ var + 1; } '. In questo modo, si evita l'utilizzo di variabili globali, che sono uno schema di progettazione errato. –

risposta

43

Avrete bisogno di usare la parola chiave globale all'interno vostra funzione. http://php.net/manual/en/language.variables.scope.php

EDIT (imbarazzato ho trascurato questo, grazie ai commentatori)

... e memorizzare il risultato qualche parte

$var = '1'; 
function() { 
    global $var; 
    $var += 1; //are you sure you want to both change the value of $var 
    return $var; //and return the value? 
} 
+1

'$ var = '1'; function() { global $ var; $ var + 1; return $ var; } ' –

+0

Bah, è troppo semplice! Comunque, grazie enorme per la rapida risposta! Acclamazione amico! – Henrikz

+2

in genere non è raccomandato l'uso globale più del necessario. –

-1
<?php 
$var = '1'; 
function x ($var) { 
return $var + 1; 
} 
echo x($var); //2 
?> 
+1

Errore nella memorizzazione del valore. –

5
$var = 1; 

function() { 
    global $var; 

    $var += 1; 
    return $var; 
} 

O

$var = 1; 

function() { 
    $GLOBALS['var'] += 1; 
    return $GLOBALS['var']; 
} 
3

Vedere http://php.net/manual/en/language.variables.scope.php per la documentazione. Penso che nel tuo caso specifico non stavi ottenendo i risultati desiderati perché non stai assegnando l'operazione $var + 1 a qualcosa. La matematica viene eseguita, e poi buttata via, essenzialmente. Vedi sotto per un esempio di lavoro:

$var = '1'; 

function addOne() { 
    global $var; 
    $var = $var + 1; 
    return $var; 
} 
3

Questa linea nella funzione: $var + 1 non cambierà il valore assegnato alla $var, anche se si utilizza la parola chiave globale.

Uno di questi funziona, però: $var = $var + 1; o $var += 1;

+0

Dato che non stai rispondendo alla domanda, penso che avrebbe avuto più senso come commento. Tuttavia è corretto. – devios1

9

Globals farà il trucco, ma sono generalmente buono per stare lontano da. Nei programmi più grandi non si può essere certi del comportamento in quanto possono essere modificati in qualsiasi punto dell'intero programma. E testare il codice che utilizza le globali diventa molto difficile.

Un'alternativa è utilizzare una classe.

class Counter { 
    private $var = 1; 

    public function increment() { 
     $this->var++; 
     return $this->var; 
    } 
} 

$counter = new Counter(); 
$newvalue = $counter->increment(); 
+0

+1 per essere una soluzione molto migliore dello stato globale, ma potrebbe anche essere necessario che ci sia un getter per $ var per i casi in cui qualcuno vuole solo il valore corrente senza incrementarlo – GordonM

1
$var = '1'; 
function addOne() use($var) { 
    return $var + 1; 
}