变量只能在定义它的区域内访问,这称为变量的范围。在PHP中,变量作用域主要分为三种:

  • 局部变量
  • 全局变量
  • 静态变量

局部变量

如果变量是在函数内部创建的,则称为局部变量并且具有局部作用域。局部变量只能在该函数内部使用。

示例

在下面的示例中,在函数MyPrint() 内部创建了一个局部变量 MyStr ,只能在该函数内部访问。

<?php
$MyStr = "Hello World!";
function MyPrint() {
  $MyStr = "Hello PHP";
  echo "$MyStr \n"; 
}

MyPrint();
echo "$MyStr \n";
?> 

上述代码的输出将是:

Hello PHP 
Hello World! 

全局变量

全局变量可以在函数内部和函数外部的任何地方使用。如果变量是在函数外部创建的,则它将是全局变量并且具有全局作用域。

要在函数内访问或创建全局变量,必须在函数中将其显式声明为全局变量。这可以通过将关键字 GLOBAL(或 global)放在变量前面来实现。

示例

在下面的示例中,创建了三个全局变量并以不同的方式使用。

<?php
//使用GLOBAL关键字创建的全局变量
GLOBAL $var1;
$var1 = 100;

//全局变量 - 在任何函数外部创建
$var2 = 200;

function MyPrint() {
  //在函数内使用全局变量
  //必须显式声明为全局
  //否则将被视为局部变量
  GLOBAL $var1, $var2;

  //在函数内创建新的全局变量
  GLOBAL $var3;
  $var3 = 300;

  //对全局变量所做的任何更改都会
  //在函数外也改变它的值
  $var1 += 5;

  echo "\$var1 = $var1 \n"; 
  echo "\$var2 = $var2 \n";
  echo "\$var3 = $var3 \n"; 
}

echo "函数内部: \n";
MyPrint();

echo "\n函数外部: \n";
echo "\$var1 = $var1 \n"; 
echo "\$var2 = $var2 \n";
echo "\$var3 = $var3 \n"; 
?> 

上述代码的输出将是:

函数内部: 
$var1 = 105 
$var2 = 200 
$var3 = 300 

函数外部: 
$var1 = 105 
$var2 = 200 
$var3 = 300 

如果在函数内部创建同名变量(不使用 GLOBAL 关键字),它将是一个局部变量,并且只能在函数内部使用。对局部变量执行的任何操作都不会更改全局变量。

示例

考虑下面的示例:

<?php
//全局变量
$var = 100;

function MyPrint() {
  //局部变量
  $var = 200;
  echo "$var \n"; 
}

MyPrint();
echo "$var \n";
?> 

上述代码的输出将是:

200 
100 

使用 $GLOBALS 而不是GLOBAL关键字

从全局范围访问变量的第二种方法是使用特殊的 PHP 定义的 $GLOBALS 数组。 $GLOBALS 数组是一个关联数组,其中全局变量的名称为键,该变量的内容为数组元素的值。请注意,$GLOBALS 存在于任何作用域中,这是因为 $GLOBALS 是超全局变量。

示例

在下面的示例中,使用 $GLOBALS 在函数内部访问全局变量。

<?php
//创建全局变量
$var1 = 100;
$var2 = 200;

function MyPrint() {
  //全局变量在函数内部访问
  //使用$GLOBALS
  $GLOBALS['var1'] = $GLOBALS['var1'] + 10;
  $GLOBALS['var2'] = $GLOBALS['var2'] + 20;
}

MyPrint();
echo "\$var1 = $var1 \n"; 
echo "\$var2 = $var2 \n";
?> 

上面代码的输出将是:

$var1 = 110 
$var2 = 220 

静态变量

静态变量只存在于局部函数作用域中,但不会丢失当程序执行离开函数作用域时它的值。

可以通过在变量名称前面放置关键字 STATIC(或 static)来创建静态变量。

示例

考虑下面的示例,其中创建了静态变量 count。它只能在函数 MyFunction() 内部访问,并在每次函数调用后保留其值。

<?php
function MyFunction() {
  //创建静态变量
  STATIC $count = 0;
  
  $count++;
  echo "$count \n"; 
}

MyFunction();
MyFunction();
MyFunction();
MyFunction();
MyFunction();
?> 

上述代码的输出将是:

1 
2 
3 
4 
5