problema con funzione e variabile global

Ho fatto una prova di funzione con variabile global in questo modo:

report_balance.php

<?php
function report_balance()
{
$start = 'prova';
echo 'dentro la funzione $start ='.$start;
echo '<br>';
global $start;
echo 'dentro la funzione $start(Global) ='.$start;
}
?>

A questo punto ho lanciato il  seguente script:

prova_sb.php

<?php
$start = 100;
require 'report_balance.php';
report_balance();
?>

funziona infatti visualizzo:

dentro la funzione $start =prova

dentro la funzione $start(Global) =100

Successivamente ho inserito lo stesso codice dello script prova_sb.php all'interno dello script dove dovrei sviluppare la funzione con la variabile globale per fare un'ulteriore verifica in questo modo:

echo '$start='.$start;
echo '<br>';
require 'report_balance.php';
report_balance();

come vedete ho inserito per verificare l'esistenza della variabile $start una echo, se lancio lo script sopra visualizzo:

$start=10

dentro la funzione $start =prova

dentro la funzione $start(Global) =

Non riesco a capire perché non riesca a visualizzare il valore global di $start, aggiungo per vs informazione che all'interno dell'ultimo script $start=$_GET['start'].

Grazie ancora per l'attenzione.

Amos

inviato 9 anni fa
amosse
X 0 X
Successivamente ho inserito lo stesso codice dello script prova_sb.php all'interno dello script dove dovrei sviluppare la funzione con la variabile globale per fare un'ulteriore verifica in questo modo:

per caso hai inserito quel codice all'interno di un'altra funzione?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie per la risposta.

Si il codice che hai citato cioé

echo '$start='.$start;
echo '<br>';
require 'report_balance.php';
report_balance();

Si trova all'interno di un'altra funzione.

risposto 9 anni fa
amosse
X 0 X

E allora è quello il problema, ovvero l'assegnazione del primo valore a $start avviene in una funzione, quindi $start nasce come variabile locale, non globale, per cui quando cerchi di accedere alla variabile globale $start non trovi nulla.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ok,

ma allora come ci si comporta in questi casi, se c'é bisogno di accedere al valore di una variabile che si trova all'interno di una funzione, e quindi nata come variabile locale?

Ciao

Amos

ps:

Ho provato ad assegnare global $start; all'interno delle funzione ma non succede niente, continuo a non vedere dentro la funzione $start(Global) =

risposto 9 anni fa
amosse
X 0 X

In qualsiasi punto del codice puoi accere (o creare) una variabile globale, basca che prima di farlo metti l'istruzione global $nome_variabile. Da quel punto in poi potrai settare o leggere la variabile globale.

Comunque ti sconsiglio di usare variabili globali. Passa invece i dati da una funzione chiamante ad una funzione chiamata attraverso i parametri della funzione da chiamare. Usa poi il return per restituire dei dati dalla funzione chiamata alla funzione chiamante

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
modificato 9 anni fa
X 0 X

Interessante, ma non avresti qualche esempio da segnalarmi? :(

in modo da poter fare qualche prova.

Grazie in anticipo

Amos

risposto 9 anni fa
amosse
X 0 X
<?php
function uno($var1) {
   $temp = due($var1, 2);
   return $temp;
}

function due($var2, $var3) {
   $tmpArray = tre($var2+1, $var3-2, $var3^2);
   return $tmpArray[0] + $tmpArray[1];
}

function tre($var4, $var5, $var6) {
   $temp1 = $var4 + $var5;
   $temp2 = $var4 + $var 6;
   return array($temp1, $temp2);
}

echo uno(123);
?>

Prova a seguire il passaggio dei dati da una funzione all'altra, senza l'ausilio di GLOBAL

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ho provato a capirci qualcosa, ma mi sembra un po' complesso per le mie conoscenze.  ???

Allora se potessi darmi un aiutino e cioé, con riferimento al tuo esempio ed al tuo messaggio precedente:

1) Qual'é la funzione chiamata che passa i dati alla chiamante, e qual'é la chiamante?

2) Quali sono i parametri della funzione da chiamare?

3) Qual'é il return che restituisce i dati dalla funzione chiamata a quella chiamante?

Grazie in anticipo.

Amos

risposto 9 anni fa
amosse
X 0 X

OK mi sono letto i tutorials che mi hai segnalato, vediamo se ho capito:

1)viene chiamata la funzione uno() a cui assegno il parametro per valore di  '123', quindi $var1=123

2)viene chiamata la funzione due() alla quale vengono passati i parametri per valore di 123, 2  quindi $var2=123 e  $var3=2

3)viene chiamata la funzione tre() alla  quale vengono passati i parametri per valore di 124,0,non ho capito cosa da 123^2 ($var3^2)?, quindi $var2+1=123+1 e $var3-2=2-2 e $var3^2 non ho capito

4)la funzione tre() ritorna un array() con valori $temp1=124 e $temp2=124

5)$tmpArray=(124,124)

6)la funzione due() ritorna $tmpArray[0]=124 + $tmpArray[1]=124

7)$temp= 248

8)la funzione uno() ritorna $temp=248

9)quindi echo uno(123); = 248

Quindi quando dici:

"passa invece i dati da una funzione chiamante a una funzione chiamata "

presumo chia sia il caso della function uno(123) "chiamante" che passa il valore $var1=123 alla function due(123,2) "chiamata"

come anche la function due(123,2) "chiamante" che passa i valori $var2=123 e $var3=2 alla function tre($var2+1,$var3-2,$var3^2) "chiamata"

Quando dici

"attraverso i parametri della funzione da chiamare"

non capisco questo punto nel nostro caso???

Quindi quando dici:

"usa poi il return per restituire dei dati dalla funzione chiamata alla funzione chiamante"

presumo che sia il caso, per esempio, della function tre() "chiamata" che restituisce alla function due() "chiamante" $tmpArray = array(124,124)

come anche la function due() "chiamata" che restituisce alla function uno() "chiamante" $temp=248 ($tmpArray[0]=124 + $tmpArray[1]=124)

Ciao

Amos

risposto 9 anni fa
amosse
X 0 X

"i parametri della funzione da chiamare" sono:

- per la funzione uno: $var1

- per la funzione due: $var2, $var3

- per la funzione tre: $var4, $var5, $var6

"il return per restituire dei dati" è costituito:

- per la funzione uno: $temp

- per la funzione due: $tmpArray[0] + $tmpArray[1]

- per la funzione tre: array($temp1, $temp2)

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda