这个问题在这里已有答案:
我写了这段代码,我明白了它的第一个功能。我在看w3schools的截图时正在练习。
关于第二和第三个功能,我只要求一些清晰的解释。
我根据代码及其结果中的差异编辑了代码。
<?php
$x = 5;
$y = 10;
function myTest1(){
global $x, $y;
$y = $x + $y;
echo "test1 value using GLOBAL keyword INSIDE function is : $y <br>";
}
myTest1();
echo "test1 value using GLOBAL keyword OUTSIDE function is : $y <br><br>";
?>
<?php
$x = 5;
$y = 10;
function myTest2(){
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
echo "test2 value using NO GLOBAL with GLOBALS[variable/index] keyword INSIDE function is nothing : $y <br>";
}
myTest2();
echo "test2 value using NO GLOBAL with GLOBALS[variable/index] keyword INSIDE function is : $y <br><br>";
?>
<?php
$x = 5;
$y = 10;
function myTest3(){
global $x, $y;
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
echo "test3 value using GLOBAL with GLOBALS[variable/index] keyword INSIDE function is : $y <br>";
}
myTest3();
echo "test3 value using NO GLOBAL with GLOBALS[variable/index] keyword INSIDE function is : $y <br>";
?>
myTest1()
和myTest2()
的工作方式相同,因为声明global $x, $y;
意味着函数内部的变量$x
和$y
指的是全局变量,它们与$GLOBALS['x']
和$GLOBALS['y']
相同。
但myTest2()
没有global
声明。当它分配给$GLOBALS['y']
时,它会更新全局变量$y
,但不会更新具有相同名称的局部变量。然后它回应$y
,而不是$GLOBALS['y']
。由于尚未分配局部变量$y
,因此它不会打印任何内容。
如果你启用error_reporting(E_ALL);
,你会看到来自myTest2()
的警告:
注意:未定义的变量:第20行的filename.php中的y