文档章节

PHP静态变量初始化一次

耗子315
 耗子315
发布于 2015/01/06 10:50
字数 582
阅读 30
收藏 0

PHP中的变量作用范围的一个重要特性就是静态变量(static 变量),仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。我们先来看看下面的实例: 


1 <?php
2 function Test()  {
3 $w3sky = 0;
4 echo $w3sky;
5 $w3sky++;
6 }


本函数每次调用时都会将 $w3sky 的值设为 0 并输出 "0"。将变量加一的 $w3sky++ 没有其到效果,因为一旦退出本函数则变量 $w3sky 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $w3sky 定义为静态(static)的: 
如下: 

1 <?php
2 function Test()
3 {
4 static $w3sky = 0;
5 echo $w3sky;
6 $w3sky++;
7 }


本函数每调用Test()都会输出 $w3sky 的值并加一。 
静态变量也提供了一种处理递归函数的方法。递归函数是一种自己调用自己的方法。写递归函数时要小心,因为可能会无穷递归下去,没有出口.务必确保 有方法来中止递归。以下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止: 
静态变量与递归函数的例子: 

01 <?php
02 function Test()
03 {
04 static $count = 0;
05 $count++;
06 echo $count;
07 if ($count < 10) {
08 Test();
09 }
10 $count--;
11 }


注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。 
声明静态变量例子: 


1 <?php
2 function foo(){
3 static $int = 0;// correct
4 static $int = 1+2; // wrong (as it is an expression)
5 static $int = sqrt(121); // wrong (as it is an expression too)
6 $int++;
7 echo $int;

8 }

==============================================================

可能会出现一些意外的情况,转自百度:


我就想真对这种现象求一个合理的解释。我用的是php5,以下是截图,为何f1和f2的执行结果不同?

下面是结果



因为静态变量会在整个执行的过程中最先初始化后再执行后面的代码!

其实相当于执行如下代码:

function f1()
{
	static $a = array(1,2,3);
	static $a = array();
	print_r($a);
	print_r($a);
}

function f2()
{
	static $a = array();
	static $a = array();
	$a[] = 1;
	$a[] = 2;
	$a[] = 3;
	print_r($a);
	print_r($a);
}



本文转载自:http://blog.csdn.net/haozi3156666/article/details/35986835

耗子315
粉丝 0
博文 18
码字总数 0
作品 0
桂林
程序员
私信 提问
杨宗德浅谈PHP变量作用域以及地址的问题

  杨宗德浅谈PHP变量作用域以及地址的问题。杨宗德主要详细的介绍了PHP变量作用域以及地址引用问题,供需要学习的朋友参考。   作用域的概念:   在PHP脚本的任何位置都可以声明变量,...

学习在线
2014/03/06
227
8
PHP防止一次请求多次调用同一函数或方法重复查询数据库的方法

在PHP开发中,为了实现需求或者因为代码质量,难免会出现在一次请求中多次调用同一函数或类方法。如果在这一函数或者类方法中需要查询数据库,多次调用时就会多次查询数据库。如果这多次查询...

零度开水
2017/01/16
1K
1
Java 学习笔记 java 基础复习

1.成员变量和局部变量 局部变量需要初始值,成员变量不需要(java自动赋值) 作用域不同 成员: 整个类的内部可见 局部变量:仅限于定义它的方法 成员变量不可以重名声明,局部变量在不同的方...

gaoyangsimida
2016/04/23
84
0
Android中的final和static

static 修饰符 作用(静态的只能访问静态的) static表示静态的,可以用来修饰成员变量和方法,也可以形成静态代码块。被static修饰的成员变量和方法独立于该类的任何对象,也就是说不依赖类特...

正阳Android
2017/11/24
0
0
static函数与普通函数

static全局变量与普通的全局变量:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量:static局部变量只被初始化一次,下一次依据上一次结果值; stat...

一只石头
2016/04/27
67
0

没有更多内容

加载失败,请刷新页面

加载更多

采坑指南——k8s域名解析coredns问题排查过程

正文 前几天,在ucloud上搭建的k8s集群(搭建教程后续会发出)。今天发现域名解析不了。 组件版本:k8s 1.15.0,coredns:1.3.1 过程是这样的: 首先用以下yaml文件创建了一个nginx服务 apiV...

码农实战
9分钟前
1
0
【2019年8月版本】OCP 071认证考试最新版本的考试原题-第6题

choose three Which three statements are true about indexes and their administration in an Orade database? A) An INVISIBLE index is not maintained when Data Manipulation Language......

oschina_5359
12分钟前
1
0
阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布

导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新;带来了正式的 feature:G1ElasticHeap;发布了用户期待的 Windows 实验版本 Experimental Windows version。...

阿里巴巴云原生
17分钟前
1
0
教你玩转Linux—磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少...

xiangyunyan
20分钟前
3
0
js 让textarea的高度自适应父元素的高度

textarea按照普通元素设置height是没有作用的,可以这么来设置, 下面给上一段项目代码 JS代码: $.fn.extend({ txtaAutoHeight: function () { return this.each(function () {...

文文1
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部