php 中的一个 变量(常量、类型或 函数)在程序中都有一定的作用范围,我们称之为作用域。php 变量作用域分为局部作用域、全局作用域和超全局作用域。
在函数内部声明/定义的变量叫局部变量,局部变量的作用域仅限于函数内部。在函数内部定义的变量,函数的 参数 和 返回值,if 和 for 结构内部使用的变量等都是局部变量。
在函数外部声明/定义的变量叫全局变量。php 全局变量在整个文件都有效。
PHP 超全局变量,在整个程序中都可以访问,我们可以使用 $GLOBALS 访问 PHP 的超全局变量。
定义在函数内部的变量,为局部变量
<?php
echo "嗨客网(www.haicoder.net)<br>";
function getName(){
$name = "HaiCoder";
echo "Name = ", $name, "<br>";
}
getName();
echo "Name = ", $name, "<br>";
程序运行后,控制台输出如下:
我们看到,我们在函数内部定义了一个变量 name,接着,我们在函数内部访问该变量时,可以正常访问,但我们在函数外部访问时,程序报错,因此,我们不可以在函数外部访问函数内部的局部变量。
在函数外部定义的变量,为全局变量
<?php
echo "嗨客网(www.haicoder.net)<br>";
$name = "HaiCoder";
function getName(){
echo "Name = ", $name, "<br>";
}
getName();
echo "Name = ", $name, "<br>";
程序运行后,控制台输出如下:
我们在函数外部,定义了一个变量 name,接着,我们分别在函数内部和函数外部访问该变量,我们看到,在函数内部访问时,程序报错,在函数外部访问,程序正常,我们在函数内部访问全局变量,需要使用 global 关键字,修改程序如下:
<?php
echo "嗨客网(www.haicoder.net)<br>";
$name = "HaiCoder";
function getName(){
global $name;
echo "Name = ", $name, "<br>";
}
getName();
echo "Name = ", $name, "<br>";
程序运行后,控制台输出如下:
我们看到,我们在函数内部访问全局变量时,使用了 global 关键字,告诉编译器,我们这里需要使用的是全局的 name 变量,因此,程序不再报错。
超全局变量,使用 GLOBALS 定义
<?php
echo "嗨客网(www.haicoder.net)<br>";
$name = "HaiCoder";
function getName(){
echo "Name = ", $GLOBALS['name'], "<br>";
$GLOBALS['name'] = 'haicoder';
}
getName();
echo "Name = ", $GLOBALS['name'], "<br>";
程序运行后,控制台输出如下:
我们首先,定义了一个全局变量 name,并赋值,接着,我们在函数内部,使用了 GLOBALS 来访问了全局变量,并且,我们在函数内部,给 GLOBALS 里的变量重新赋值,最后,在函数外部,我们访问该变量时,已经被修改了。
php 中的一个变量(常量、类型或函数)在程序中都有一定的作用范围,我们称之为作用域。php 变量作用域分为局部作用域、全局作用域和超全局作用域。