今天,我开始学习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中
有人可以帮我解决有关它的问题吗?
答案 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)
有两种情况使用变量全球:
global $x;
形式的允许功能集中声明。$GLOBALS
,即所有全局变量的数组。我个人更喜欢这种方法来制作有效的代码; 以下是两个
的代码<?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";
?>
<?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";
?>
答案 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)跳过该输出,要么在全局范围分配默认值