PHP的变量类型和作用域详解
2015-01-24信息快讯网
什么是变量的作用域?变量的作用域是指在脚本的一次生命周期内变量的有效范围。一般来说有全局和局部之分
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 date()函数警告: It is not safe to rely on the system解决方法
PHP中exec函数和shell_exec函数的区别
Smarty变量调节器失效的解决办法
PHP的error_reporting错误级别变量对照表
PHP源码分析之变量的存储过程分解
使用配置类定义Codeigniter全局变量
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
使用PHP导出Redis数据到另一个Redis中的代码
PHP四大安全策略
PHP中4个加速、缓存扩展的区别和选用建议
php使用websocket示例详解
php截取字符串之截取utf8或gbk编码的中英文字符串示例
php实现快速排序的三种方法分享
PHP static局部静态变量和全局静态变量总结
PHP代码优化之成员变量获取速度对比
PHP中session变量的销毁
PHP判断变量是否为0的方法
PHP内核探索:变量概述
浅谈PHP变量作用域以及地址引用问题
浅析php中常量,变量的作用域和生存周期
浅析php变量作用域的一些问题