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 ...

ava下static关键字用法详解

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

C&num; static的用法详解

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

Nginx基础篇(2)- Nginx基本配置文件和变量详解

Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. ...

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

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

C&num;中static静态变量的用法

使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型 静态全局变量 定义 ...

&lbrack;转&rsqb; C&num; 中的static静态变量

logitechyan原文关于C#中static静态变量 C#静态变量使用static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被 ...

关于C&num;中static静态变量

C#静态变量使用static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一C#静 ...

随机推荐

2015年我国IT行业发展趋势分析(转)

中国信息化建设步伐正持续推进,行业和企业信息化应用水平也在不断提高,这使得it技术与应用系统已成为企业日常工作中不可或缺的基础设施.与此同时,用户关注的重心也日益转向it系统的稳定性.系统对生产效率的 ...

javascript生成对象的三种方法

/** js生成对象的三种方法*/ // 1.通过new Object,然后添加属性 示例如下: var people1 = new Object(); people1.name = 'xiaohai ...

【linux】自定义配置debian&plus;openbox

openbox确实是好东西阿,小巧,不开iceweasel时内存总使用量不到200M,功能又强大,不过限于我是菜鸟,openbox再强大也有限...debian装openbox是及其简单的,不过为了使 ...

oracle学习笔记&mdash&semi;&mdash&semi;配置环境

题记:最近再学oracle,于是按照这本经典的书来学习. 配置环境 如何正确建立SCOTT/TIGER演示模式 需要建立和运 ...

docker no permmition problem

resolved by: sudo docker run --privileged ....

tj

--统计set @collSql='select sum(case Ca_IssueType when 0 then 1 else 0 end) as IssueCount,sum(case when ...

poj2287

田忌赛马的题目- - 贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比. (因为若是田忌的别的马很可能就赢不了了,所以两者比) 2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的 ...

为GridView中的DropDownList赋值

AMS常见问题

1.安装完AMS是否就可以实现直播点播了? 答:是的,ams运行后,就可以提供各种协议的直播输出地址,和点播地址:不过一般情况下客户还得需要另外的Web系统来配合使用,来完成对前台用户界面的友好化 ...

WPF样式中TargetType 属性 &lpar;Property&rpar; 和 x&colon;Key 属性 &lpar;Attribute&rpar;

如第一个示例所示,如果将 TargetType 属性设置为 TextBlock 而不为样式分配 x:Key,样式就会应用于所有 TextBlock 元素.这种情况下,x:Key 隐式设置为 {x:Ty ...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值