PHP的静态变量介绍

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

 1 <?php
 2     function test()
 3     {
 4
 5         static $nm = 1;
 6
 7         $nm = $nm * 2;
 8
 9         print $nm."<br />";
10
11     }
12
13     // 第一次执行,$nm = 2
14     test();
15     // 第一次执行,$nm = 4
16     test();
17     // 第一次执行,$nm = 8
18     test();
19 ?>

程序运行结果:

2
4
8

函数test()执行后,变量$nm的值都保存了下来了。
在class中经常使用到静态属性,比如静态成员、静态方法。
Program List:类的静态成员
静态变量$nm属于类nowamagic,而不属于类的某个实例。这个变量对所有实例都有效。
::是作用域限定操作符,这里用的是self作用域,而不是$this作用域,$this作用域只表示类的当前实例,self::表示的是类本身。

 1 <?php
 2     class nowamagic
 3     {
 4         public static $nm = 1;
 5
 6         function nmMethod()
 7         {
 8             self::$nm += 2;
 9             echo self::$nm . '<br />';
10         }
11     }
12
13     $nmInstance1 = new nowamagic();
14     $nmInstance1 -> nmMethod();
15
16     $nmInstance2 = new nowamagic();
17     $nmInstance2 -> nmMethod();
18 ?>

程序运行结果:

3
5

Program List:静态属性

 1 <?php
 2     class NowaMagic
 3     {
 4         public static $nm = 'www.nowamagic.net';
 5
 6         public function nmMethod()
 7         {
 8             return self::$nm;
 9         }
10     }
11
12     class Article extends NowaMagic
13     {
14         public function articleMethod()
15         {
16             return parent::$nm;
17         }
18     }
19
20     // 通过作用于限定操作符访问静态变量
21     print NowaMagic::$nm . "<br />";
22
23     // 调用类的方法
24     $nowamagic = new NowaMagic();
25     print $nowamagic->nmMethod() . "<br />";
26
27     print Article::$nm . "<br />";
28
29     $nmArticle = new Article();
30     print $nmArticle->nmMethod() . "<br />";
31 ?>

程序运行结果:

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

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

 1 <?php
 2 function Demonstration()
 3 {
 4     return 'This is the result of demonstration()';
 5 }
 6
 7 class MyStaticClass
 8 {
 9     //public static $MyStaticVar = Demonstration(); //!!! FAILS: syntax error
10     public static $MyStaticVar = null;
11
12     public static function MyStaticInit()
13     {
14         //this is the static constructor
15         //because in a function, everything is allowed, including initializing using other functions
16
17         self::$MyStaticVar = Demonstration();
18     }
19 } MyStaticClass::MyStaticInit(); //Call the static constructor
20
21 echo MyStaticClass::$MyStaticVar;
22 //This is the result of demonstration()
23 ?>

程序运行结果:

1 This is the result of demonstration()

转自:http://www.nowamagic.net/php/php_StaticVariable.php

转载于:https://www.cnblogs.com/gordon-ge/archive/2012/08/02/2619640.html

转载PHP的静态变量介绍相关推荐

  1. PHP的静态变量介绍

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

  2. [转载]内存分配 知识,全局,局部,静态变量

    [转载]内存分配 知识,全局,局部,静态变量 预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变 ...

  3. C++类中静态变量和静态方法使用介绍!

    原链接:http://www.ecoviews.cn/net/archives/216.html 静态成员的提出是为了解决数据共享的问题.实现共享有许多方法,如:设置全局性的变量或对象是一种方法.但是 ...

  4. 【转载】wpf绑定全局静态变量并且实现变更通知(mvvm)

    这篇看了之后,很有启发,也很有用!,分享给大家 以下是转载内容. ---------------- 版权声明:本文为CSDN博主「returnTrue999」的原创文章,遵循CC 4.0 BY-SA版 ...

  5. 代码静态变量详细的介绍一下PHP递归算法

    本文笔者在北京喝咖啡的时候突然想到的...之前就有想写几篇关于代码静态变量的文章,所以回家到之后就奋笔疾书的写出来发布了 PHP递归算法代码: 复制代码代码如下: < ?php  //定义PI一 ...

  6. [转载] Java中静态成员变量,静态代码块,静态内部类何时被初始化?

    参考链接: Java中的初始化程序块Initializer Block 关于这个问题,本文不扯理论,直接上代码,通过结果来验证结论,废话少说,测试代码如下: public class StaticTe ...

  7. [转载] Python-类变量,成员变量,静态变量,类方法,静态方法,实例方法,普通函数

    参考链接: Python中的类或静态变量 原文地址:https://www.cnblogs.com/20150705-yilushangyouni-Jacksu/p/6238187.html Pyth ...

  8. [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)

    参考链接: Java程序的输出| 构造函数 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ 1. 静态代码块在类加载时即运行,而且 ...

  9. c语言c++语言中静态变量,函数详解

    静态变量,静态函数对于一些c,c++的初学者来说,造成了不少的困扰.昨晚和寝室的室友讨论到这 个问题,想了一下,作了一下总结: 虽然说c和c++在很多人的眼里就是孪生姐妹,其实还是有很大区别的.在这里 ...

  10. c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...

    C语言中静态变量是什么意思,有什么作用,static在数据类型前面表示什么 最近刚看了C存储类的章节.所以来说说. C语言为变量提供了⑤种不同的存储模型,或者说是存储类. ①个变量可以用存储时期描述, ...

最新文章

  1. 世界顶尖精密仪器技术都掌握在哪些国家?
  2. 桌面虚拟化场景中对存储系统IO性能的评估方法
  3. Linux C编程--格式化I/O
  4. POJ2688状态压缩(可以+DFS剪枝)
  5. 2.3.11 管程
  6. linux ftp做yum源,在RedHat5下架设yum源服务器(FTP)
  7. Windows Server 2008 R2 负载平衡入门篇
  8. JQuery源码解析(一)
  9. linux系统配置脚本,Linux系统配置脚本开机自启
  10. eclipse 设置默认编码为Utf-8
  11. 使用python插件将程序打包为exe
  12. Project2019入门到精通
  13. STM8系列芯使用STVP烧写程序设定读保护和如何解除读保护操作
  14. 什么是磁盘?磁盘的组成?接口和分区?
  15. 计算机网络 自顶向下方法.原书第6版 - 网络层次、应用、发展
  16. HDU - 4532 湫秋系列故事――安排座位
  17. Mybatis 报The error occurred while handling results
  18. 美图秀秀想让妹纸留下来分享美图,社交梦能如愿以偿吗?
  19. jQuery插件autoComplete介绍(10级学员 张帅鹏总结)
  20. JXTA技术手册学习--------(1)通告

热门文章

  1. 【Python笔记】Python/C++解决约瑟夫环问题
  2. 【UVA129】Krypton Factor(回溯+在回溯法的基础上判断一个字符串是否有相邻的重复子串(后缀))
  3. requests模块中使用代理proxy发送请求
  4. 计算机打印指定测试页到文件夹中,上海计算机等级一级考试复习指导.pptx
  5. php大小写转换,php中字母大小写转换函数
  6. mysql grant tables_使用SKIP-GRANT-TABLES 解决 MYSQL ROOT密码丢失
  7. ubuntu安装sasl失败 - 解决方法
  8. 28 Implement strStr() @Python
  9. 215.数组中的第K个最大元素
  10. No module named ‘wrapt‘