php自定义函数之静态变量

如果我想知道函数被调用了多少次怎么办?在没有学习静态变量的时候,我们没有好的办法来解决。

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行。

有了这个特点,我们就可以实现,最开始我们的提问:
函数调用词数的统计。

先执行10次demo()函数试试,再执行10次test()函数试试:

<?php
function demo()
{
   $a = 0;
   echo $a;
   $a++;
}



function test()
{
   static $a = 0;
   echo $a;
   $a++;
}


demo();
demo();
demo();
demo();
demo();
demo();
demo();
demo();
demo();
demo();

/*
for($i = 0 ;$i < 10 ; $i++){
   test();
}
*/
?>

上例中你会发现:
test();执行一次数值就会加1,而demo输出的显示结果,始终为0。

通过上例你就会发现,本文开始处说明的静态变量的特点。


继续学习
||
<?php //--------------如何理解static静态变量----------- /** 普通局部变量 */ function local() { $loc = 0; //这样,如果直接不给初值0是错误的。 ++$loc; echo $loc . '<br>'; } local(); //1 local(); //1 local(); //1 echo '===================================<br/>'; /** static静态局部变量 */ function static_local() { static $local = 0 ; //此处可以不赋0值 $local++; echo $local . '<br>'; } static_local(); //1 static_local(); //2 static_local(); //3 //echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。 echo '=======================================<br>'; /** static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量) */ function static_global() { global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,但是不能想当然的写上"static"加以修饰,那样是错误的. $glo++; echo $glo . '<br>'; } static_global(); //1 static_global(); //2 static_global(); //3 ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

php入门教程之一周学会PHP

  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载
Musket

Musket

普通变量demo()输出时就像是喝醉了借钱出去,然后就忘了,借一次忘一次。加了静态static的test()的就是把每次借钱的人都记在小本本上。

3年前    添加回复 2

cloudy

你这个解释也是挺合理的

cloudy · 2019-03-07 15:51
回复
钟嘉富

钟嘉富

静态变量static 就是函数再次调用时 不会被重新赋值,

3年前    添加回复 0

回复
水之蓝色

水之蓝色

for($i = 0 ;$i < 10 ; $i++){ test(); 这块调用十次test()函数,个人感觉应该输出0啊,因为你每次调用都是对a重新赋值0,虽然它是静态函数啊。没看明白

3年前    添加回复 0

Reg

其实不难理解。相当于调用demo的时候一开始a=0;然后输出一下0,然后a++ =1;之后再次调用demo的时候a又被重新赋值成了0.所以再次输出还是0.而test调用的时候由于是静态变量,所以一开始a=0,所以第一下输出是0.然后a++ = 1;然后执行第二次。进来的时候a不会被重新赋值,上一次a执行完是1;所以输出1;依次类推。

Reg · 2018-07-24 16:46
Reg

第二次调用test的时候a是不会被赋值的,只会得出a++之后的值。所以调用一次a++执行一次+1。

Reg · 2018-07-24 16:47
回复
Id

Id

<?php $a=0; function demo(){ echo $GLOBALS['a']; $GLOBALS['a']++; }; demo(); demo(); demo(); demo(); ?>

3年前    添加回复 0

回复
meleeZhao

meleeZhao

坐一回沙发~~

3年前    添加回复 0

回复
 

 

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行。

1年前 1

YuShine Wei

YuShine Wei

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行。

1年前 0

黑暗风暴

黑暗风暴

静态变量不会再初始化变量,会在原值的基础上读取执行。

1年前 0

Nanson

Nanson

在函数体内使用静态变量和普通变量的区别:相同的声明初始化语句,普通变量每次调用时都会重新初始化 静态变量只会在第一次调用时使用初始化赋值语句。

2年前 0

ʘᴗʘ

ʘᴗʘ

static 静态变量 就是函数再次调用时 不会被重新赋值,

2年前 0

fighting&it'sme

fighting&it'sme

前++和后++的理解: 如果有运算:前++是先赋值后运算,而后++是先运算后赋值。但对于变量而言,不管是前++和后++都是自己自增1。前--和后- -原理与其相同。

3年前 0

fighting&it'sme

fighting&it'sme

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行。

3年前 0

这个菜鸟是谁-5

这个菜鸟是谁-5

看不懂18.7.6

3年前 0

小赢一场

小赢一场

居然可以利用gloable来创建全局静态变量,并且只要声明了还可以不用赋值,神奇

3年前 0

博龙

博龙

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行

3年前 1

夜星辰

夜星辰

静态变量的特点是:声明一个静态变量,第二次调用函数的时候,静态变量不会再初始化变量,会在原值的基础上读取执行

4年前 0

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~