PHP的变量类型和作用域详解

 更新时间:2014年03月12日 16:30:38   作者:  
什么是变量的作用域?变量的作用域是指在脚本的一次生命周期内变量的有效范围。一般来说有全局和局部之分

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等结构语句内部声明的变量

1.global关键词和$GLOBALS实例

复制代码 代码如下:
<?php
$a = 0;
function foo()
{
    global $a;
    echo $a;
}
function foo2()
{
    echo $GLOBALS['a'];
}

2.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
3.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

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

相关文章

  • PHP模版引擎原理、定义与用法实例

    PHP模版引擎原理、定义与用法实例

    这篇文章主要介绍了PHP模版引擎原理、定义与用法,结合实例形式分析了php模板引擎相关的模板编译、缓存处理、变量替换等操作技巧,需要的朋友可以参考下
    2019-03-03
  • PHP使用curl函数发送Post请求的注意事项

    PHP使用curl函数发送Post请求的注意事项

    这篇文章主要给大家介绍的是PHP使用curl函数发送Post请求的一些注意事项,文中通过示例代码与解释介绍的很详细,对大家学习或则使用PHP具有一定的参考借鉴价值,有需要的朋友们可以跟着小编一起来学习学习吧。
    2016-11-11
  • 在数据量大(超过10万)的情况下

    在数据量大(超过10万)的情况下

    在数据量大(超过10万)的情况下...
    2007-01-01
  • php笔记之常用文件操作

    php笔记之常用文件操作

    php文件操作是phper必须掌握的 虽然用到的机会比较少,现在整理一下学习的笔记代码有详细的注释 看起来应该没问题的。
    2010-10-10
  • 深入PHP nl2br()格式化输出的详解

    深入PHP nl2br()格式化输出的详解

    本篇文章是对PHP nl2br()格式化输出进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php文件上传类完整实例

    php文件上传类完整实例

    这篇文章主要介绍了php文件上传类,结合完整实例形式分析了php上传文件的类型判断、大小计算机限制等技巧,需要的朋友可以参考下
    2016-05-05
  • 火车头discuz6.1 完美采集的php接口文件

    火车头discuz6.1 完美采集的php接口文件

    火车头官方提供的discuz6.1的php接口比较粗糙,基本不能满足需要,本人在采集的工作中使用的采集接口文件如下
    2009-09-09
  • PHP 定界符 使用技巧

    PHP 定界符 使用技巧

    因为PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况
    2009-06-06
  • php文件上传原理与实现方法详解

    php文件上传原理与实现方法详解

    这篇文章主要介绍了php文件上传原理与实现方法,结合实例形式详细分析了PHP文件上传的配置、前后台处理、错误处理等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-12-12
  • PHP引用符&的用法详细解析

    PHP引用符&的用法详细解析

    以下是对PHP中引用符&的用法进行了详细的分析介绍。需要的朋友可以过来参考下
    2013-08-08

最新评论