web-dev-qa-db-fra.com

Comment corriger l'erreur de variable non définie en PHP?

Aujourd'hui, j'ai commencé à apprendre le PHP. Et, j'ai créé mon premier fichier PHP pour tester différentes variables. Vous pouvez voir mon dossier comme suit.

<?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";
?>

J'ai trouvé l'erreur suivante lorsque j'ai exécuté ce fichier dans le navigateur.

Avis: Variable non définie: x dans /opt/lampp/htdocs/anand/php/index.php à la ligne 19

Remarque: Variable non définie: y dans /opt/lampp/htdocs/anand/php/index.php à la ligne 29

Quelqu'un peut-il m'aider à résoudre le problème le concernant?

4
Anand Mistry

La première erreur ($x n'est pas défini) est due au fait que les globales ne sont pas importées par défaut dans les fonctions (par opposition aux "super globaux" qui sont).

Vous devez indiquer à votre fonction que vous référencez la variable 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";
}

Sinon, PHP ne peut pas dire si vous masquez la variable globale avec une variable locale du même nom.

La deuxième erreur ($y n'est pas définie), c'est parce que la portée locale n'est que cela, locale. L'intérêt de ceci est que $y ne "fuit" pas hors de la fonction. Bien sûr, vous ne pouvez pas accéder à $y plus tard dans votre code, en dehors de la fonction dans laquelle il est défini. Si vous le pouviez, ce ne serait pas différent d'un global.

6
meagar

définir $ x comme global comme

global $x;

ou essayez ceci

<?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";
?>
2
himanshu bhardiya

Le code se comporte comme prévu, mais si vous souhaitez utiliser les deux variables du script, utilisez cette commande.

<?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
Vipin Kumar Soni
<?php
$a = 1; /* global scope */ 

function test()
{ 
    echo $a; /* reference to local scope variable */ 
} 

test();
?>

vous obtenez la première erreur parce que la variable $ a ne peut pas accéder à la valeur de la variable globale sauf si vous déclarez explicitement global $a dans la fonction.

Exemple # 1 Utilisation de global

<?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;
?>

Et la dernière erreur que vous obtenez parce que $ y est définie à l'intérieur de la fonction mytest(), de sorte que son étendue sera limitée à cette fonction uniquement.

Pour une explication détaillée, lisez ici http://php.net/manual/fr/language.variables.scope.php

1
R R

Il y a 2 cas d'utilisation d'une variable globalement:

  1. Utiliser une seule copie de cette variable et la modifier depuis n’importe où, c'est-à-dire depuis une fonction ou en dehors de la portée globale. Dans ce cas, vous avez besoin d'une déclaration dans le jeu de fonctions autorisé sous la forme global $x;.
  2. Si vous avez besoin de variables locales pour des fonctions individuelles avec le même identifiantutilisé pour la variable globale (c.-à-d. Variables en dehors de toutes les fonctions), dans ce cas, vous avez deux variables du même nom, à savoir une locale et une globale pour cette fonction Ensuite, vous devez utiliser un superglobalvariable $GLOBALSc'est-à-dire un tableau de toutes les variables globales. Personnellement, je préfère cette approche pour créer un code efficace;

Ce qui suit est le code pour les deux

code1 (en utilisant la déclaration 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 (en utilisant le tableau $ 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";
?>

Pour R&EACUTE;F&EACUTE;RENCE

1
Rajesh Paul

Dans PHP, les variables globales doivent être déclarées globales dans une fonction si elles doivent être utilisées dans cette fonction.

function myTest()
{
$y=10; // local scope
global $x;
.....
}

En déclarant que $ x global dans la fonction fera référence à la version globale de la variable

0

vous devez apprendre la portée d'une variable en php

http://php.net/manual/en/language.variables.scope.php

Dans votre code $ x est global, donc pour accéder à cette variable dans la fonction, utilisez Global $ x; au début de la fonction qui est 

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";
}

pour $ y, vous ignorez cette sortie en cochant isset ($ y) ou vous affectez une valeur par défaut au niveau global 

0
gvgvgvijayan