函数局部变量、全局变量、静态变量

时间:2022-05-11 07:36:42

局部变量

局部变量也成为内部变量,是在函数内部声明的变量,其作用域仅限于函数内部,离开函数后再使用这种变量是非法的。不仅在函数中声明的变量是局部变量,为声明函数设置的参数因为只能在在本函数内部使用所以也是局部变量。它们的作用域仅限于函数内部,因为当每次函数被调用时,内部的变量才被声明,执行完毕后内部的变量都被释放。

<?php
header('content-type:text/html;charset=utf-8');
function demo($one){
$two=100;
echo "在函数内部执行:$one+$two=".($one+$two).'<br/>';//函数内部使用两个局部变量
}
demo(200);
echo "在函数外部执行:$one+$two=".($one+$two).'<br/>';

//结果如下:

在函数内部执行:200+100=300
在函数外部执行:+=0

如果函数外部需要调用函数中变量值,必须通过return指令,来将其值传回至主程序区块以做后续处理

<?php
header('content-type:text/html;charset=utf-8');
function demo($one){
$two=100;
return ($one+$two);
}
$sum=demo(200);
echo $sum;

全局变量

全局变量也称为外部变量,在函数外部定义的,它的作用域为从变量定义开始处开始,到本程序文件的末尾。和其他编程语言不同,全局变量不是自动设置为可用的。在php中,由于函数可以视为单独的程序片段,所以局部变量会覆盖全局变量的能见度,因此在函数中无法直接调用全局变量。

<?php
header('content-type:text/html;charset=utf-8');
$one=100;
$two=200;
function demo(){
//相当于在函数内部新声明并且没有赋初值的两个变量。
echo "运算结果:".($one+$two).'<br/>';
}
demo(); //运算结果:0

不能在函数中直接使用全局变量,若要在函数中使用全局变量,一是利用global关键字定义目标变量,以告诉函数主体此变量为全局变量。2是用php自定义$GLOBALS数组

1.global

<?php
header('content-type:text/html;charset=utf-8');
$one=100;
$two=200;
function demo(){
//在函数内部使用global关键字加载全局变量,加载多个用逗号分隔
global $one,$two;
echo "运算结果:".($one+$two).'<br/>';
}
demo(); // 运算结果:300

2.$GLOBALS

<?php
header('content-type:text/html;charset=utf-8');
$one=100;
$two=200;
function demo(){
$GLOBALS['two']=$GLOBALS['one']+$GLOBALS['two'];
}
demo();
echo $two;//输入结果300,说明全局变量被访问到重新被赋值

静态变量

局部变量从存储方式上可分为动态存储类型和静态存储类型,函数中的局部变量默认都是动态地分配存储空间的,其中的内部动态变量在函数调用结束后自动释放。如果希望在函数执行后,其内部变量依然保持在内存中,应该使用静态变量。在函数执行完毕后,静态变量并不会消失,在所有对该函数的调用之间共享,即在函数再次执行时,静态变量将接续前次的结果继续运算。并且在第一次被调用时初始化,要声明函数变量为静态变量的,用关键字static.

<?php
header('content-type:text/html;charset=utf-8');
function demo(){
static $a=0;
echo $a;
$a++;
}
demo(); //输入:1
demo(); //输入:2
demo(); //输入:3