PHP变量
变量的作用域是脚本中变量可被引用/使用的部分
PHP 有四种不同的变量作用域:
- local //局部 (在函数内定义)
- global //全局 (在函数外定义)
- static //静态
- parameter //参数
内容总览
1、定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。
2、函数内定义的变量就是局部变量,它的作用域为函数定义范围内。
3、函数之间存在作用域互不影响。
4、函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组
在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量,即使局部变量中没有全局变量相同的变量,也会被覆盖。如下:
局部变量和全局变量
<?php
$x=5; // 全局变量
function myTest()
{
$y=10; // 局部变量
echo "<p>测试函数内变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
}
myTest();
echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>
以上实例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y变量在函数内声明所以它是局部变量。
当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为$x变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。然后我们在myTest()函数外输出两个变量的值,函数将会输出全局变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量;$x在函数外定义,属于全局变量。
可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内.
global 关键字 和 $GLOBALS
global关键字作用:函数内访问全局变量。
在函数内写: global 要声明的全局函数名称(二者中间有空格)
例如:
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
**除了可以使用global在函数内做声明 以便内访问全局变量,还可以在函数内使用 $GLOBALS[index]的形式。
因为:PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
我们可以不使用global,将上个例子改写为使用$GLOBALS的形式
例如:
<?php
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
?>
Static作用域
当一个函数完成时,它的所有变量都会被删除,如果希望某个局部变量不被删除,可以在第一次声明变量时使用static关键字。
例如:
<?php
function myTest()
{
static $x=0; //在第一次变量声明时使用static
echo $x;
$x++; //设定函数$x累加
echo PHP_EOL; // 换行符 (不换行就输出在一起是012)
}
myTest(); //第一次调用此函数
myTest(); //第二次调用
myTest(); //第三次调用
?>
我们用了换行输出结果应该是
0
1
2
参数作用域
参数是通过调用代码将值传递给函数的局部变量。
参数是在参数列表中声明的,作为函数声明的一部分。
实例:
<?php
function myTest($x)
{
echo $x;
}
myTest(5);
详情见PHP函数