Oggi ho iniziato a studiare PHP. E ho creato il mio primo file PHP per testare diverse variabili. Puoi vedere il mio file come segue.
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
Ho trovato il seguente errore quando ho eseguito questo file nel browser.
Avviso: variabile non definita: x in /opt/lampp/htdocs/anand/php/index.php alla riga 19
Avviso: variabile non definita: y in /opt/lampp/htdocs/anand/php/index.php alla riga 29
Qualcuno può aiutarmi a risolvere il problema al riguardo?
risposte:
5 per risposta № 1Il primo errore ($x
non è definito) perché i globuli non vengono importati nelle funzioni per impostazione predefinita (al contrario dei "super globali", che sono).
Devi dire alla tua funzione che stai facendo riferimento alla variabile globale $x
:
function myTest()
{
global $x; // $x refers to the global variable
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
Altrimenti, PHP non può dire se stai ombreggiando la variabile globale con una variabile locale con lo stesso nome.
Il secondo errore ($y
non è definito), perché l'ambito locale è proprio questo, locale. Il punto è tutto ciò $y
non "esce" dalla funzione. Naturalmente non è possibile accedervi $y
più avanti nel codice, al di fuori della funzione in cui è definito. Se potessi, non sarebbe diverso da un globale.
2 per risposta № 2
imposta $ x come globale
global $x;
o prova questo
<?php
$x=5; // global scope
function myTest($x)
{
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest($x);
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
1 per risposta № 3
Il codice si comporta come previsto, ma se si desidera utilizzare entrambe le variabili nello script, utilizzare questo
<?php
$x=5; // global scope
function myTest(){
global $x;
global $y;
$y=10;
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
1 per risposta № 4
<?php
$a = 1; /* global scope */
function test()
{
echo $a; /* reference to local scope variable */
}
test();
?>
stai ricevendo il primo errore perché la variabile $ a non può accedere al valore della variabile globale se non dichiari esplicitamente global $a
all'interno della funzione.
Esempio n. 1 Uso globale
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b; //if you want to access global variable if you have to use global keyword
$b = $a + $b;
}
Sum();
echo $b;
?>
E l'ultimo errore che stai ricevendo perché $ y è definito all'interno della funzione mytest()
quindi il suo scopo sarà limitato a quella sola funzione.
Per una spiegazione dettagliata Leggi qui http://php.net/manual/en/language.variables.scope.php
1 per risposta № 5
Esistono 2 casi di utilizzo di una variabile globalmente:
- Usando una singola copia di quella variabile e modificada qualsiasi luogo, ad esempio una modifica all'interno di una funzione o all'esterno, cioè nell'ambito globale. In tal caso, è necessario una dichiarazione nel set di funzioni consentito nel modulo
global $x;
. - Nel caso in cui siano necessarie variabili locali per singole funzioni con il stesso identificatore utilizzato per la variabile globale (ovvero variabili al di fuori di tutte le funzioni); in quel caso hai due variabili con lo stesso nome, cioè una locale e una globale per quella funzione. Quindi è necessario utilizzare a superglobale variabile
$GLOBALS
vale a dire una matrice di tutte le variabili globali. Personalmente preferisco questo approccio per creare un codice efficiente;
Di seguito è riportato il codice per i due
codice1 (usando la dichiarazione globale)
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
global $x;
echo "<p>Test variables inside the function:<p>";
echo "Variable x in global scope is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
code2 (usando l'array $ GLOBALS [])
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
$x=23;
echo "<p>Test variables inside the function:<p>";
echo "Variable x in global scope is: ".$GLOBALS["x"];
echo "<br>Variable x in local scope is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
Per RIFERIMENTO
0 per risposta № 6
devi imparare l'ambito di una variabile in php
http://php.net/manual/en/language.variables.scope.php
Nel tuo codice $ x è globale quindi per accedere a quella variabile all'interno della funzione usa $ x globale; all'inizio della funzione che è
function myTest()
{
global $x;
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
per $ y salti quell'output controllando isset ($ y) oppure assegna un valore predefinito nell'ambito globale
0 per risposta № 7
In PHP le variabili globali devono essere dichiarate globali all'interno di una funzione se devono essere utilizzate in quella funzione.
function myTest()
{
$y=10; // local scope
global $x;
.....
}
Dichiarando $ x global all'interno della funzione si farà riferimento alla versione globale della variabile