PHP - 变量作用域



在 PHP 中,变量的作用域是指变量定义和可访问的上下文范围。通常,一个简单的顺序 PHP 脚本,没有循环或函数等,只有一个作用域。在“<?php”和“?>”标签内声明的任何变量,从定义点开始在整个程序中都可用。

根据作用域,PHP 变量可以是以下三种类型之一:

主脚本中的变量也可以提供给通过includerequire语句包含的任何其他脚本。

示例

在以下示例中,“test.php”脚本包含在主脚本中。

main.php

<?php
   $var=100;
   include "test.php";
?>

test.php

<?php
   echo "value of \$var in test.php : " . $var;
?>

当执行主脚本时,它将显示以下输出

value of $var in test.php : 100

但是,当脚本具有用户定义的函数时,函数内部的任何变量都具有局部作用域。因此,在函数内部定义的变量无法在外部访问。在函数外部(上方)定义的变量具有全局作用域。

示例

请查看以下示例:

<?php
   $var=100;   // global variable
   function myfunction() {
      $var1="Hello"; 	// local variable
      echo "var=$var  var1=$var1" . PHP_EOL;
   }
   myfunction();
   echo "var=$var  var1=$var1" . PHP_EOL; 
?>

它将产生以下输出

var=  var1=Hello
var=100  var1=

PHP Warning:  Undefined variable $var in /home/cg/root/64504/main.php on line 5
PHP Warning:  Undefined variable $var1 in /home/cg/root/64504/main.php on line 8

注意,全局变量不会自动在函数的局部作用域内可用。此外,函数内部的变量在外部不可访问。

“global”关键字

要启用在函数的局部作用域内访问全局变量,应使用“global”关键字显式执行此操作。

示例

PHP 脚本如下:

<?php
   $a=10; 
   $b=20;
   echo "Global variables before function call: a = $a b = $b" . PHP_EOL;
   function myfunction() {
      global $a, $b;
      $c=($a+$b)/2;
      echo "inside function a = $a b = $b c = $c" . PHP_EOL;
      $a=$a+10;
   }
   myfunction();
   echo "Variables after function call: a = $a b = $b c = $c";
?>

它将产生以下输出

Global variables before function call: a = 10 b = 20
inside function a = 10 b = 20 c = 15
Variables after function call: a = 20 b = 20 c = 
PHP Warning:  Undefined variable $c in /home/cg/root/48499/main.php on line 12

现在可以在函数内部处理全局变量。此外,在函数内部对全局变量所做的任何更改都将反映在全局命名空间中。

$GLOBALS 数组

PHP 将所有全局变量存储在一个名为$GLOBALS的关联数组中。变量的名称和值构成键值对。

示例

在以下 PHP 脚本中,使用 $GLOBALS 数组访问全局变量:

<?php
   $a=10; 
   $b=20;
   echo "Global variables before function call: a = $a b = $b" . PHP_EOL;

   function myfunction() {
      $c=($GLOBALS['a']+$GLOBALS['b'])/2;
      echo "c = $c" . PHP_EOL;
      $GLOBALS['a']+=10;
   }
   myfunction();
   echo "Variables after function call: a = $a b = $b c = $c";
?>

它将产生以下输出

Global variables before function call: a = 10 b = 20
c = 15
PHP Warning:  Undefined variable $c in C:\xampp\htdocs\hello.php on line 12
Variables after function call: a = 20 b = 20 c =

静态变量

使用static关键字定义的变量不会在每次调用函数时都初始化。此外,它保留了前一次调用的值。

示例

请查看以下示例:

<?php
   function myfunction() {
      static $x=0;
      echo "x = $x" . PHP_EOL;
      $x++;
   }
   for ($i=1; $i<=3; $i++) {
      echo "call to function :$i : ";
      myfunction();
   }
?>

它将产生以下输出

call to function :1 : x = 0
call to function :2 : x = 1
call to function :3 : x = 2
广告