首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP的变量范围

PHP的变量范围

作者头像
luxixing
发布2019-05-29 17:43:45
1.9K0
发布2019-05-29 17:43:45
举报
文章被收录于专栏:luxixingluxixingluxixing

什么是变量的作用域?变量的作用域是指在脚本的一次生命周期内变量的有效范围。一般来说有全局和局部之分。 PHP中变量的作用域可以分为:超全局(全局变量的特殊类型,在局部范围里可直接使用),全局,局部,静态(是局部变量的特殊类型) 在PHP中,全局变量实际上是静态全局变量,如果不用unset显式的释放,那么等脚本运行结束全局变量才会被释放掉 局部静态变量细分可以是 局部静态函数变量(函数中声明的static变量),局部静态成员变量(类中声明的 static 属性,被所有类实例共享) 局部静态变量只有脚本运行结束才会被自动释放

  • 超全局变量:在一个脚本的任何作用域里都可以被访问,这些都是PHP内置的 $GLOBALS $_SERVER $_GET $_POST $_FILES $_SESSION(持久化存储) $_COOKIE(持久化存储) $_REQUEST $_ENV
  • 全局变量:声明的变量不在class,function,if等语言结构内部,如果要在class,function,if等语言内部使用,需要用关键词global或者超全局变量$GLOBALS
  • 静态变量: 在function中使用关键词static声明的变量,静态变量的值保留直至脚本结束
  • 局部变量:在class,function,if/while/for等结构语句内部声明的变量

global关键词和$GLOBALS

<?php
$a = 0;
function foo()
{
    global $a;
    echo $a;
}
function foo2()
{
    echo $GLOBALS['a'];
}

static 变量和普通局部变量区别

<?php
function foo1()
{
    $var = 0;
    $var++;
    return $var;
}
echo foo1();
echo foo1();
//输出都是1
function foo ()
{
    static $var = 0;
    $var++;
    return var;
}
echo foo();
echo foo();
//第一次输出1 第二次2

static 关键词还可以声明静态属性和静态方法 静态属性只能被类调用,而不能被类实例调用 静态方法里不能使用$this,只能用self访问类的静态属性

另外理解static变量的一段代码

<?php
class t
{
        static $v = 10;
        public function a()
        {
                static $var = 10;
                $var++;
                echo $var . "<br>\n";
        }
        public static function aa()
        {
                self::$v++;
                echo self::$v . "<br>\n";
        }
}
$o1 = new t();
$o1->a();//输出11
$o2 = new t();
$o2->a();//输出12
t::aa();//输出11
$o1->aa();//输出12
$o2->aa();//输出13

从上面的代码中,可知如果一个类成员方法中有静态变量,即使是不同的类实例,他们也会共享这个静态变量,尽管这个静态变量不是类静态成员变量,这点容易让人迷惑

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档