简述php静态变量,PHP之static静态变量详解(二)

在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料。

static用法如下:

1.static 放在函数内部修饰变量

2.static放在类里修饰属性,或方法

3.static放在类的方法里修饰变量

4.static修饰在全局作用域的变量

所表示的不同含义如下:

1.在函数执行完后,变量值仍然保存

如下所示:

function testStatic() {

static $val = 1;

echo $val;

$val++;

}

testStatic();//output 1

testStatic();//output 2

testStatic();//output 3

?>

2.修饰属性或方法,可以通过类名访问,如果是修饰的是类的属性,保留值

如下所示:

class Person {

static $id = 0;

function __construct() {

self::$id++;

}

static function getId() {

return self::$id;

}

}

echo Person::$id;//output 0

echo "
";

$p1=new Person();

$p2=new Person();

$p3=new Person();

echo Person::$id;//output 3

?>

3.修饰类的方法里面的变量

如下所示:

class Person {

static function tellAge() {

static $age = 0;

$age++;

echo "The age is: $age

";

}

}

echo Person::tellAge(); //output 'The age is: 1'

echo Person::tellAge(); //output 'The age is: 2'

echo Person::tellAge(); //output 'The age is: 3'

echo Person::tellAge(); //output 'The age is: 4'

?>

4.修饰全局作用域的变量,没有实际意义(存在着作用域的问题,详情查看)

如下所示:

static $name = 1;

$name++;

echo $name;

?>

另外:考虑到PHP变量作用域

include 'ChromePhp.php';

$age=0;

$age++;

function test1() {

static $age = 100;

$age++;

ChromePhp::log($age); //output 101

}

function test2() {

static $age = 1000;

$age++;

ChromePhp::log($age); //output 1001

}

test1();

test2();

ChromePhp::log($age); //outpuut 1

?>

可以看出:这3个变量是不相互影响的,另外,PHP里面只有全局作用域和函数作用域,没有块作用域

如下所示:

include 'ChromePhp.php';

$age = 0;

$age++;

for ($i=0; $i<10; $i++) {

$age++;

}

ChromePhp::log($i); //output 10;

ChromePhp::log($age); //output 11;

?>

参考资料:

PHP之static静态变量详解(一)

什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在 ...

PHP之static静态变量详解

在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料. static用法如下: 1.static 放在函数内部修饰变量 2.s ...

Shell学习之Bash变量详解&lpar;二&rpar;

Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

MySQL 5&period;5 服务器变量详解二(转)

add by zhj:在MySQL5.6中对一些参数有增删改,详见http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html ...

MySQL 5&period;5 服务器变量详解&lpar;二&rpar;

innodb_adaptive_flushing={ON|OFF} 设定是否允许MySQL服务器根据工作负载动态调整刷写InnoDB buffer pool中的脏页的速率.动态调整刷写速率的目的在于避 ...

C&num; static的用法详解

C#   static的用法详解 有的东西你天天在用,但未必就代表你真正了解它,正如我之前所了解的 static . 一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 n ...

ava下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static ...

PopUpWindow使用详解&lpar;二&rpar;——进阶及答疑

相关文章:1.2. 上篇为大家基本讲述了有关PopupWindow ...

android 尽量不要使用static静态变量

使用静态static静态变量潜在性问题: 1.占用内存,并且内存一般不会释放: 2.在系统不够内存情况下会自动回收静态内存,这样就会引起访问全局静态错误. 3.不能将activity作为static静 ...

随机推荐

ubuntu12&period;04安装搜狗输入法和配置

1.安装 参考http://hi.baidu.com/lowkey2046/item/7ff8b33abe492bd06d15e9b6 2.配置 当前系统语言默认为英语 1)点击右上角的键盘按钮-&g ...

linux 基础 shell脚本命令

#########shell脚本命令#### 1.diff diff file file1 ####比较两个文件的不同 -c ####显示周围的行 -u ####按照一格式统一输出生成补丁 -r ## ...

初识HTTP协议

本篇文章从概念上初识HTTP协议,参考链接:http://www.runoob.com/http/http-tutorial.html 目录: 一.HTTP协议    HTTP 工作原理    HTT ...

批量修改java文件的包名

需求:我复制进批量的java文件,但是包名需要用现在创建的包名 导入进来时,由于包名不一致会报错 解决办法,点击包名鼠标右键>Refactor>Rename 结果如下ok:

RESTful Level

REST(表述性状态转移)是最近几年讨论的最为热烈的话题之一,其起源于Roy.T.Fielding博士的论文.Roy博士在他的论文里从架构风格角度阐 ...

总结React写参数的几种方式

1.在render方法内 class Text extends Component{ render(){ const data=[1,2,3]; return( { data.map((item,in ...

install virtual enviroment on windows

H:\>pip install virtualenv  --install virtualenvCollecting virtualenv Downloading https://files.p ...

Linux简单学习

参考自:http://www.runoob.com/linux/linux-tutorial.html  一.是什么 Linux 类Unix操作系统.是一个基于POSIX和UNIX的多用户.多任务.支 ...

在Web&period;config或App&period;config中的添加自定义配置 &lt&semi;转&gt&semi;

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置 ...

java Comparable 和 Cloneable接口

Comparable接口定义了compareTo方法,用于比较对象. 例如,在JavaAPI中,Integer.BigInteger.String以及Date类定义如下 Cloneable接口 Clo ...

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值