Variabile non risconosciuta dentro una funzione

robyspider77

Nuovo Utente
3 Ago 2022
8
0
1
buongiorno a tutti!!

il mio problema è il seguente: ho un codice PHP che mi estrae i dati da un database SQL; fin qui tutto bene, i dati vengono estratti correttamente.
Successivamente imposto una funzione php che in base ai dati estratti dal database fa qualcosa;

prima della funzione imposto una variabile
Codice:
$posti=($row['posti']);

all'interno della funzione, la variabile $posti è un parametro che devo utilizzare

Codice:
function trovaFascia($fascia) {
    


    
if ($fascia > $posti)
 
{
$classeFascia="fasciaorariaprenotata";   
}
 
else
{
    
    $classeFascia='fasciaoraria';
}
return $classeFascia;
}

La domanda è: come mai nell'esecuzione mi viene l'errore

Warning: Undefined variable $posti in .... on line ....

se al posto di $posti metto un valore numerico mi dà tutto ok

grazie a chi risponderà
 
Ciao, questo è dovuto alla gestione dello scope (ambito di visibilità degli elementi). In php la visibilità delle variabili è limitata solo all'ambito in cui queste sono state definite.

Quindi la variabile che hai definito nell'ambito globale non può essere vista dentro una funzione a meno che non lo specifichi in qualche modo.

In altri linguaggi la gestione dello scope può essere diversa, ad esempio in javascript è possibile accedere normalmente a variabili definite all'interno di oggetti genitori.

A seconda delle tue necessità puoi risolvere con diversi approcci.

- Puoi passare la variabile stessa come argomento della funzione:
PHP:
$posti = 5;
function trovaFascia($fascia, $posti){
  echo $posti; // 5
}
trovaFascia(1, $posti);

- Puoi usare la keyword global per definire la visibilità di quella variabile all'interno della funzione:
PHP:
$posti = 5;
function trovaFascia($fascia){
  global $posti;
  echo $posti; // 5
}
trovaFascia(1);

- Puoi usare l'array superglobale $GLOBALS per accedere alla variabile dall'interno della funzione:
PHP:
$posti = 5;
function trovaFascia($fascia){
  echo $GLOBALS['posti']; // 5
}
trovaFascia(1);

e altri possibili metodi.
 

Discussioni simili