PHP基础知识点【八】变量作用域

变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。变量依据声明的位置分为局部变量和全局变量两种。

一、局部变量

(1)局部变量也叫内部变量,是在函数内部声明的变量。

     起作用仅限于函数内部,离开该函数的时候再使用这种变量是非法的。当每次调用函数的时候,函数内部的变量才被声明,执行完毕后,函数内部的变量都将被释放。

function add1($a){
    $b = 100;//函数内声明一个变量  
    echo "internal var execute :$a + $b",'=',($a+$b),'<br/>';//局部变量求和
}
add1(100);//向add函数传入100进行计算  函数内部可以访问局部变量,输出结果200
echo "overall var execute :$a + $b",'=',($a+$b),'<br/>';//函数外部不能访问函数内部的局部变量,报错

      上面的例子中声明一个add()函数,只有调用函数时候,才会去声明两个变量$a和$b。这两个变量都是局部变量,只能用于函数内部使用。当add()输出结果执行完毕后,这两个变量都会释放,在函数外是访问不到的。

(二)如果想在函数外部调用该变量值,必须通过return语句返回其值。

function add2($a){#声明一个函数,传入一个参数$a
    $b = 100;#函数内部声明一个局部变量$b
    return $a+$b;#使用算术运算符计算结果返回到函数调用处
}
$sum  = add2(100);#将函数的返回值赋给$sum
echo $sum;//200 输出函数返回值

二、全局变量

(1)全局变量也叫做外部变量,是在函数外部定义的。

      作用域从变量开始处到程序结束处。和其他语言不同,全局变量不可以在函数内部直接调用,函数可以视为单独的程序片段。c语言中全局变量在函数中自动生效,除非被局部变量覆盖。

$one = 100;
$two = 200;
function add3(){
    echo $one+$two;#相当于直接在函数内部声明两个局部变量并且没有赋值。
}
add3();//报错notice,意味$one和$two没有定义,输出0
echo $one+$two;//输出300

(2)PHP中全局变量在函数中使用需要声明global。

$one = 100;
$two = 200;
function add4(){
    global $one,$two;//在函数内部使用global关键字加载全局变量
    echo $one+$two;
}
add4();//输出300
echo $one+$two;//输出300

(3)在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组 。

$one = 100;
$two = 200;
function add5(){
    $GLOBALS['one'] = $GLOBALS['one'] + $GLOBALS['two'];#超全局数组访问全局变量
}
add5();//执行后改变了全局$one的值
echo $one;//输出300 说明全局变量访问到了,被重新赋值

三、静态变量

       变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

       局部变量从存储方式上可以有动态存储类型和静态存储类型。函数中的局部变量,如果不专门声明static存储,那么默认都是动态分配内存空间,其变量会在函数调用后自动释放。如果希望函数在执行完毕后,变量依然保存在内存中应使用static关键字声明静态变量。

      声明静态变量后,是在所有对该函数的调用之间共享。即函数再次执行时候,静态变量将持续前次的结果继续运算,并且仅仅在脚本的执行期间,函数第一次调用时候被初始化。

function demo(){
    static $a = 0;
    echo $a;
    $a++;
}
demo();//0
demo();//1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值