如何在PHP中修复未定义的变量错误?

时间:2013-12-05 04:59:09

标签: php error-handling compiler-errors syntax-error runtime-error

今天,我开始学习PHP。而且,我已经创建了我的第一个PHP文件来测试不同的变量。您可以看到我的文件如下。

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

我在浏览器中运行此文件后发现以下错误。

  

注意:未定义的变量:第19行的/opt/lampp/htdocs/anand/php/index.php中的x

     

注意:未定义的变量:y在第29行的/opt/lampp/htdocs/anand/php/index.php中

有人可以帮我解决有关它的问题吗?

7 个答案:

答案 0 :(得分:6)

第一个错误($x未定义)是因为默认情况下全局变量不会导入函数(而不是“超级全局变量”)。

您需要告诉您的函数您正在引用全局变量$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";
}

否则,PHP无法判断您是否使用同名的局部变量遮蔽全局变量。

第二个错误($y未定义),因为本地范围就是本地范围。它的全部意义在于$y不会从函数中“泄漏”。当然,您不能在代码中稍后访问$y,而不是在定义它的函数之外。如果可以的话,那就和全球一样。

答案 1 :(得分:2)

将$ x设为全局,如

global $x;

或试试这个

<?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 :(得分:1)

<?php
$a = 1; /* global scope */ 

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

test();
?>

您收到第一个错误,因为变量$ a无法访问全局变量的值,除非您在函数内明确声明global $a

示例#1使用全局

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

您收到的最后一个错误是因为 $ y 是在函数mytest()中定义的,因此其范围仅限于该函数。

详细说明请阅读http://php.net/manual/en/language.variables.scope.php

答案 3 :(得分:1)

有两种情况使用变量全球

  1. 使用该变量的单个副本并从任何地方修改它,即从函数内部或外部(即在全局范围内)进行修改。在这种情况下,您需要在 global $x; 形式的允许功能集中声明。
  2. 如果您需要为全局变量使用相同标识符的各个函数的局部变量(即所有函数之外的变量);在这种情况下,您有两个具有相同名称的变量,即该函数的一个局部变量和一个全局变量。然后,您需要使用超全局变量 $GLOBALS ,即所有全局变量的数组。我个人更喜欢这种方法来制作有效的代码;
  3. 以下是两个

    的代码

    code1(使用全局声明)

    <?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(使用$ 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";
    ?>
    

    REFERENCE

答案 4 :(得分:1)

代码按预期运行,但如果要在脚本中使用这两个变量,请使用此

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

答案 5 :(得分:0)

在PHP中,如果要在函数中使用全局变量,则必须在函数内声明全局变量。

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

通过在函数中声明$ x global将引用变量的全局版本

答案 6 :(得分:0)

你必须在php

中学习变量的范围

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

在你的代码中,$ x是全局代码,以便在函数内部访问该变量 全球$ x;在函数的开头

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

对于$ y要么通过检查isset($ y)跳过该输出,要么在全局范围分配默认值