PHP的变量范围

局部变量

定义:也称作内部变量,局部变量是在函数内定义的,其作用域仅限于函数内部,离开函数后再使用这种变量就是非法错误的!
注意:
1.主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。
2.允许在不同的函数中使用相同的变量名,他们代表不同变量,分配不同的存放单元,互不相干,不会发生混淆。
3.复合语句中定义的变量,只限于使用当前函数中,也是复合语句的局部变量,复合语句:就是用{}包含起来的语句块。
4.形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
eg:

<?php
function test(){
$a=1;
}
echo $a;

其结果不存在,会报错,因为$a=1;其中$a是局部变量,仅在这个函数内部有效

全局变量

**定义:**又称外部变量,在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾
由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。
在php函数中无法直接使用全局变量,如需使用必须使用global声明变量
全局变量extern与static
extern在其他源程序中也可以使用;
static只能在本程序中使用。
PHP中预定义了几个"超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。(转载)
PHP 超级全局变量列表:
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION

变量描述
$GLOBAL G L O B A L 是 P H P 的 一 个 超 级 全 局 变 量 组 , 在 一 个 P H P 脚 本 的 全 部 作 用 域 中 都 可 以 访 问 。 GLOBAL 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。 GLOBALPHPPHP访GLOBAL 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
$_SERVER$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
$_REQUESTPHP $_REQUEST 用于收集HTML表单提交的数据。
$_POSTPHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post”。
$_GETPHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“get”。
<?php
$i=10;//全局变量
function test(){
global $i;//声明$i为全局变量,然后在这个函数内部就可以使用$i了
echo $i;
$a=1;
}
test();
?>

对于这个事例,我们不编写global $i;时,它什么都输不出来,然后我们要声明一下才能用,如上面所示

静态变量

**定义:**静态变量是指在函数内部定义变量的时候使用static关键字来定义变量特点,函数执行完毕之后变量不会立即消失,当再次调用函数时,静态变量保存的值依然存在,并且仅在第一次执行函数的时候会初始化。
静态变量也可以用于存储常数。具体来说,静态变量可用const,constant或final(根据语言决定)等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区;为防止常数变量被错误的指针写入覆盖,亦可在这块区域启用内存保护机制。

静态局部变量(转载)
静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义,但不像自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。
(2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋值。数值型变量自动赋初值0,字符型变量赋空字符。
(4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源文件的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
建议在全部符合下列条件的情况下才使用静态变量:
(1)变量所包含的对象体积较大,占用内存较多
(2)变量所包含的对象生命周期较长
(3)变量所包含的对象数据稳定
(4)该类的实例 有 对该变量包含对象的共享需求
eg:

<?php
function test(){
static $a=10;//静态变量$a,初始化静态变量,仅在第一次调用的时候执行
echo ++$a;//当第二次执行这个函数的时候$a这个变量依然存在并且里面的值也存在
}
test();
echo'<br />';
test();
?>

该程序运行结果11 12,更好验证了静态变量的特征

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值