变量的作用域是脚本中变量可被引用/使用的部分

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函数

标签: none

添加新评论