浅谈PHP的静态变量

静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。

只要在变量前加上关键字static,该变量就成为静态变量了。伯爵娱乐城

view source

print?

01 <?php
02     function test()
03     {
04         static $nm = 1;
05         $nm = $nm * 2;
06         print $nm."<br />";
07     }
08    
09     // 第一次执行,$nm = 2
10     test();
11     // 第一次执行,$nm = 4
12     test();
13     // 第一次执行,$nm = 8
14     test();
15 ?>

程序运行结果:

view source

print?

1 2
2 4
3 8

函数test()执行后,变量$nm的值都保存了下来了。

在class中经常使用到静态属性,比如静态成员、静态方法。

Program List:类的静态成员

静态变量$nm属于类nowamagic,而不属于类的某个实例。这个变量对所有实例都有效。

::是作用域限定操作符,这里用的是self作用域,而不是$this作用域,$this作用域只表示类的当前实例,self::表示的是类本身。

view source

print?

01 <?php
02     class nowamagic
03     {
04         public static $nm = 1;
05        
06         function nmMethod()
07         {
08             self::$nm += 2;
09             echo self::$nm . ‘<br />‘;
10         }
11     }
12    
13     $nmInstance1 = new nowamagic();
14     $nmInstance1 -> nmMethod();
15    
16     $nmInstance2 = new nowamagic();
17     $nmInstance2 -> nmMethod();
18 ?>

程序运行结果:

view source

print?

1 3
2 5

Program List:静态属性

view source

print?

01 <?php
02     class NowaMagic
03     {
04         public static $nm = ‘www.nowamagic.net‘;
05         public function nmMethod()
06         {
07             return self::$nm;
08         }
09     }
10    
11     class Article extends NowaMagic
12     {
13         public function articleMethod()
14         {
15             return parent::$nm;
16         }
17     }
18    
19     // 通过作用于限定操作符访问静态变量
20     print NowaMagic::$nm . "<br />";
21    
22     // 调用类的方法
23     $nowamagic = new NowaMagic();
24     print $nowamagic->nmMethod() . "<br />";
25    
26     print Article::$nm . "<br />";
27    
28     $nmArticle = new Article();
29     print $nmArticle->nmMethod() . "<br />";
30 ?>

程序运行结果:

view source

print?

1 www.nowamagic.net
2 www.nowamagic.net
3 www.nowamagic.net
4 www.nowamagic.net

Program List:简单的静态构造器

PHP没有静态构造器,你可能需要初始化静态类,有一个很简单的方法,在类定义后面直接调用类的Demonstration()方法。

view source

print?

01 <?php
02 function Demonstration()
03 {
04     return ‘This is the result of demonstration()‘;
05 }
06 class MyStaticClass
07 {
08     //public static $MyStaticVar = Demonstration(); //!!! FAILS: syntax error
09     public static $MyStaticVar = null;
10     public static function MyStaticInit()
11     {
12         //this is the static constructor
13         //because in a function, everything is allowed, including initializing using other functions
14        
15         self::$MyStaticVar = Demonstration();
16     }
17 } MyStaticClass::MyStaticInit(); //Call the static constructor
18 echo MyStaticClass::$MyStaticVar;
19 //This is the result of demonstration()
20 ?>

程序运行结果:

view source

print?

1 This is the result of demonstration()
时间: 2024-10-11 12:21:32

浅谈PHP的静态变量的相关文章

浅谈php生成静态页面

一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权限限制等,但是,对应一些我们经常频频使用的文件,比方说,开发的新闻发布系统,我们不希望很多用户都读取数据库才显示结果,这样一方面消耗了服务器的资源,另一方面占去了浏览者大量可贵的响应时间,所有,有了"静态页面话"的做法,当前很多网站都采用这种技术,一般都是由管理后台控制,或者生成html直

浅谈 举家搬迁静态文件到CDN

由于七牛CDN最近做活动,对于标准用户可以免费使用如下优惠 10 GB 存储空间 10 G/月 下载流量 10 万次/月 PUT/DELETE 请求 100 万次/月 GET 请求 以上这些指标直接就说明了,对于很多小型网站基本就够了.所以我就把我的网站的一些静态文件和图片都转移到CDN中去 前面我写过一篇文章 :[逗比作孽呀]网站缓存优化   就是为了加快图片的访问速度,这次把图片都放到CDN去,这样就会更快了 但是对于我来讲,我还要考虑一个问题,那就是如果七牛CDN出问题了,我如何快速的切换

浅谈linux中shell变量$#,[email&#160;protected],$0,$1,$2,$?的含义解释

浅谈linux中shell变量$#,[email protected],$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,[email protected],$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linux中shell变量$#,[email protected],$

从内存层次浅谈动态与静态

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827364.html 静态内容:在内存中有一片特定的区域,不属于某特定的类对象,而是属于所有类对象,每个对象默认有指针指向这片区域,以调用静态的属性.方法 当创建第一个类对象时,类代码由硬盘加载到内存时,静态内容加载一次,开辟区域存放,之后每次创建对象时不再加载.每个对象默认有指针指向这片区域,以调用静态的属性.方法. 所以,静态方法的调用格式为:  类名.静态方法名 .  对象名.方法名  均可 动态内容

浅谈export 以及环境变量

简要说一下env,set,export的区别:env命令显示环境变量,set和export显示环境变量和自定变量. export:可以讲自定变量转化为环境变量之前有一个疑惑,我们定义环境变量PATH时习惯性的前面加一个export ,但是后来我测试不加export直接定义环境变量也会在export里面存在,经过查看资料研究才发现,系统的环境变量具有继承性,设置环境变量时不加export也会继承下去,但是自定变量就不一样了.必须前面加上export(或者declare -x  变量名)才具有继承性

浅谈final修饰的变量

一直大概的知道final关键字的作用,但是自己实际工作中却很少用,除非在声明一些常量值的时候,今天忽然自己在项目中用一个map进行存储一些值.一开始我只是用private修饰的,心里想的是如果final修饰的话,应该不能修改了.毕竟被final修饰的变量不可变.今天回家后,做了下面的尝试,彻底暴露出自己基础的不扎实. final的作用 被final修饰的类不可以被继承 被final修饰的方法不可以被重写 被final修饰的变量不可变 实战演示 1.首先看下面代码 public class Fin

浅谈javaScript数据类型、变量、内存之间的关系,文末有图解

一.变量是没有类型的 在JavaScript中,定义变量的方法是“var 变量名=变量值”,无论这个变量要给他赋值为一个数字.字符串还是数组,他的类型都不需要声明.也就是说如果我只声明了一个变量“var a”,而没有给他赋值,那么我可以给他赋任何值,在语法上都是没有问题的. 二.变量值是有类型的 尽管变量是没有类型的,使用typeof方法仍然能够获取到一个类型: var a; console.log(typeof(a));//值为undefined var a=1; console.log(ty

[转] 浅谈JS中的变量及作用域

Situation One <script> var i; function sayHello() { var x=100; alert(x); x++; } sayHello();   // 输出100 alert(x);  // 报错,因为x是局部变量,访问不到 </script> Situation Two <script> function sayHello() { var x=100; if (x==100) { var y=x+1; alert(y);  /

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc