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

oknwwptz  于 2022-12-25  发布在  PHP
关注(0)|答案(9)|浏览(223)

今天,我开始学习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";
?>

我在浏览器中运行此文件时发现以下错误。
注意:未定义变量:x在/opt/lampp/htdocs/anand/php/index.php中的第19行
注意:未定义变量:在/opt/lampp/htdocs/anand/php/index.php的第29行中输入y
我该如何解决与此相关的问题?

byqmnocz

byqmnocz1#

第一个错误($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是未定义的)是因为local作用域就是local。它的全部意义在于$y不会“泄漏”到函数之外。当然,你不能在代码后面访问$y,在定义它的函数之外。如果你可以,它将与全局作用域没有什么不同。

6rvt4ljy

6rvt4ljy2#

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

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

    test();
?>

出现第一个错误是因为变量$a无法访问全局变量的值,除非在函数内部显式声明global $a
Example #1使用全局

<?php
    $a = 1;
    $b = 2;

    function Sum()
    {
        global $a, $b; // If you want to access a global variable,
                       // you have to use the 'global' keyword

        $b = $a + $b;
    }

    Sum();
    echo $b;
?>

最后一个错误是因为**$y**是在函数mytest()中定义的,所以它的作用域将仅限于该函数。
有关详细说明,请阅读 * Variable scope *。

vptzau2j

vptzau2j3#

将$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";
?>
zte4gxcn

zte4gxcn4#

使用变量全局有两种情况:
1.使用该变量的单个副本,并从任何地方修改它,即从函数内部或外部(即全局作用域)修改。在这种情况下,您需要在允许的函数集中以**global $x;格式进行声明。
1.如果您需要单个函数的局部变量与全局变量(即所有函数之外的变量)的
标识符相同;在这种情况下,你有两个同名的变量,一个是本地变量,另一个是全局变量,那么你需要使用一个superglobalvariable$GLOBALS**,也就是所有全局变量的数组,我个人更喜欢这种方法来提高代码的效率;
下面是这两个的代码。

代码1(使用全局声明)

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

代码2(使用$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**。

1rhkuytd

1rhkuytd5#

代码的行为符合预期,但如果您希望在脚本中使用这两个变量,请使用以下代码:

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

to94eoyn6#

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

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

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

ql3eal8s

ql3eal8s7#

在PHP中,你必须了解变量的作用域。参见 * Variable scope *。
在您的代码中,$x是全局变量,因此为了访问函数中的该变量,请在函数的开头使用global $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)跳过输出,或者在全局范围内分配一个默认值。

u0njafvf

u0njafvf8#

将$x放在代码中的””外部,如echo”变量$x是:“.$x;

h9vpoimq

h9vpoimq9#

因此,要想在您的资源上发布问题,这并不总是可能的,因为不清楚为什么您总是会提出您找不到的错误,或者您是否习惯了每个人都对您的论调泼冷水?

相关问题